#import “ViewController.h”
#import “Masonry.h”
@interface ViewController ()
@property (nonatomic, strong) UIView *backView;
@property (nonatomic, strong) UIView *backView1;
@property (nonatomic, strong) UILabel *oneLab;
@property (nonatomic, strong) UILabel *twoLab;
@end
@implementation ViewController
(void)viewDidLoad {
[super viewDidLoad];
//在使用Masonry添加约束之前,需要在addSubview之后才能使用,否则会导致崩溃。
//在添加约束时初学者经常会出现一些错误,约束出现问题的原因一般就是两种:约束冲突和缺少约束。对于这两种问题,可以通过调试和log排查。
//之前使用Interface Builder添加约束,如果约束有错误直接就可以看出来,并且会以红色或者黄色警告体现出来。而Masonry则不会直观的体现出来,而是以运行过程中崩溃或者打印异常log体现,所以这也是手写代码进行AutoLayout的一个缺点。
//mas_makeConstraints() 添加约束
//mas_remakeConstraints() 移除之前的约束,重新添加新的约束
//mas_updateConstraints() 更新约束
//equalTo() 参数是对象类型,一般是视图对象或者mas_width这样的坐标系对象
//mas_equalTo() 和上面功能相同,参数可以传递基础数据类型对象,可以理解为比上面的API更强大
//width() 用来表示宽度,例如代表view的宽度
//mas_width() 用来获取宽度的值。和上面的区别在于,一个代表某个坐标系对象,一个用来获取坐标系对象的值
[self addSubChildViews];
[self layoutSubViewsMotion];
// Do any additional setup after loading the view, typically from a nib.
}
(void)addSubChildViews {
[self.view addSubview:self.backView];
[self.backView addSubview:self.backView1];
[self.backView1 addSubview:self.oneLab];
[self.backView1 addSubview:self.twoLab];
}
(void)layoutSubViewsMotion {
[self.backView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.mas_equalTo(20);
make.top.mas_equalTo(20);
make.right.mas_equalTo(-20);
make.height.mas_equalTo(200);
}];
//一、内边距10===1.
// [self.backView1 mas_makeConstraints:^(MASConstraintMaker *make) {
// make.left.mas_equalTo(self.backView).mas_offset(10);
// make.top.mas_equalTo(self.backView).mas_offset(10);
// make.right.mas_equalTo(self.backView).mas_offset(-10);
// make.bottom.mas_equalTo(self.backView).mas_offset(-10);
// }];
//========2.或者insets
[self.backView1 mas_makeConstraints:^(MASConstraintMaker *make) {
//下、右不需要写负号,insets方法中已经为我们做了取反的操作了
make.edges.mas_equalTo(self.backView).insets(UIEdgeInsetsMake(10, 10, 10, 10));
}];
[_oneLab mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.top.mas_equalTo(10);
make.right.mas_equalTo(-10);
// make.height.mas_equalTo(self.backView1).mas_offset(0);//不设置按照文字适应
}];
[_twoLab mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.mas_equalTo(10);
make.top.mas_equalTo(self.oneLab.mas_bottom).mas_offset(10);
make.right.mas_equalTo(self.backView1).mas_offset(-10);
}];
//mas_update 更新布局
[self.backView1 mas_updateConstraints:^(MASConstraintMaker *make) {
make.bottom.mas_equalTo(self.twoLab);
}];
//mas_remake 重新布局
// [self.backView1 mas_remakeConstraints:^(MASConstraintMaker *make) {
// make.bottom.mas_equalTo(self.twoLab);
// }];
//二、设置约束优先级
/**
Masonry为我们提供了三个默认的方法,priorityLow()、priorityMedium()、priorityHigh(),这三个方法内部对应着不同的默认优先级。
除了这三个方法,我们也可以自己设置优先级的值,可以通过priority()方法来设置。Masonry也帮我们定义好了一些默认的优先级常量,分别对应着不同的数值,优先级最大数值是1000
*/
//
// [self.twoLab mas_makeConstraints:^(MASConstraintMaker *make) {
// make.center.equalTo(self.view);
// make.width.equalTo(self.view).priorityLow();
// make.width.mas_equalTo(20).priorityHigh();
// make.height.equalTo(self.view).priority(200);
// make.height.mas_equalTo(100).priority(1000);
// }];
//三、设置约束比列
// 设置当前约束值乘以多少,例如这个例子是twoLab的宽度是backView1宽度的0.8倍。
// [self.twoLab mas_makeConstraints:^(MASConstraintMaker *make) {
// make.center.equalTo(self.backView1);
// make.width.equalTo(self.backView1).multipliedBy(0.8);
// }];
}
(UIView *)backView {
if (_backView == nil) {
_backView = [[UIView alloc] init];
_backView.backgroundColor = [UIColor orangeColor];
}
return _backView;
}
(UIView *)backView1 {
if (_backView1 == nil) {
_backView1 = [[UIView alloc] init];
_backView1.backgroundColor = [UIColor brownColor];
}
return _backView1;
}
(UILabel *)oneLab {
if (_oneLab == nil) {
_oneLab = [[UILabel alloc] init];
_oneLab.backgroundColor = [UIColor cyanColor];
_oneLab.font = [UIFont systemFontOfSize:13];
_oneLab.textAlignment = NSTextAlignmentCenter;
_oneLab.numberOfLines = 0;
_oneLab.text = @“十五从军征,八十始得归。道逢乡里人:“家中有阿谁?” “遥看是君家,松柏冢累累。”(遥看 一作:遥望)兔从狗窦入,雉从梁上飞。中庭生旅谷,井上生旅葵。舂谷持作饭,采葵持作羹。羹饭一时熟,不知贻阿谁?出门东向看,泪落沾我衣。”;
}
return _oneLab;
}
(UILabel *)twoLab {
if (_twoLab == nil) {
_twoLab = [[UILabel alloc] init];
_twoLab.backgroundColor = [UIColor magentaColor];
_twoLab.font = [UIFont systemFontOfSize:15];
_twoLab.textAlignment = NSTextAlignmentLeft;
_twoLab.numberOfLines = 0;
_twoLab.text = @“涉江采芙蓉,兰泽多芳草。采之欲遗谁,所思在远道。还顾望旧乡,长路漫浩浩。同心而离居,忧伤以终老。”;
}
return _twoLab;
}
over!