Masonry使用
一、使用Maaonry注意事项
1.在使用Masonry添加约束之前,需要在addSubview之后才能使用,否则会导致崩溃。
2.在添加约束时初学者经常会出现一些错误,约束出现问题的原因一般就是两种:约束冲突和缺少约束。对于这两种问题,可以通过调试和log排查。
3.之前使用Interface Builder添加约束,如果约束有错误直接就可以看出来,并且会以红色或者黄色警告体现出来。而Masonry则不会直观的体现出来,而是以运行过程中崩溃或者打印异常log体现,所以这也是手写代码进行AutoLayout的一个缺点。
二、基础使用
Masonry基础API
mas_makeConstraints() 添加约束
mas_remakeConstraints() 移除之前的约束,重新添加新的约束
mas_updateConstraints() 更新约束
equalTo()
mas_equalTo()
width() 用来表示宽度,例如代表view的宽度。代表坐标系对象
mas_width() 用来获取宽度的值。获取坐标系对象的值。
三、常用方法
1.设置内边距
通过insets简化设置内边距的方式
[ self.view2 mas_makeConstraints:^(MASConstraintMaker *make {make.edges.equalTo(self.view1).insets(UIEdgeInsetsMake(5, 10, 15, 20));}];
2.更新约束
[self.view2 mas_makeConstraints:^(MASConstraintMaker *make){
make.center.equalTo(self.view1).offset(0);
make.size.mas_equalTo(CGSizeMake(80, 80)); }];
3.大于等于或小于等于某个值的约束
//设置宽度大于等于300
make.width.greaterThanOrEqualTo(@300);
//设施宽度小于等于300
make.width.lessThanOrEqualTo(@300);
4.设置约束优先级
Masonry为我们提供了三个默认的方法,priorityLow()、priorityMedium()、priorityHigh(), 这三个方法内部对应着不同的默认优先级。
除了这三个方法,我们也可以自己设置优先级的值,可以通过priority()方法来设置。
[self.view2 mas_makeConstraints:^(MASConstraintMaker *maker) {
maker.center.equalTo(self.view1);
maker.width.equalTo(self.view1).priorityLow();
maker.width.equalTo(@20).priorityHigh();
ma height ker..equalTo(self.view1).priority(200);
maker.height.equalTo(@40).priority(1000);
}];
5.约束比例
//设置当前约束值乘以多少,例如view2的宽度是view1的两倍
make.width.equalTo(self.view1).multipliedBy(2);