Masonry采起了链式编程的方式,代码理解起来很是清晰易懂,并且写完以后代码量看起来很是少。以前用NSLayoutConstraint写不少代码才能实现的布局,用Masonry最少一行代码就能够搞定。下面看到Masonry的代码就会发现,太简单易懂了。编程
mas_makeConstraints() 添加约束 框架
mas_remakeConstraints() 移除以前的约束,从新添加新的约束 less
mas_updateConstraints() 更新约束,写哪条更新哪条,其余约束不变 函数
equalTo() 参数是对象类型,通常是视图对象或者mas_width这样的坐标系对象 布局
mas_equalTo() 和上面功能相同,参数能够传递基础数据类型对象,能够理解为比上面的API更强大 ui
width() 用来表示宽度,例如表明view的宽度 spa
mas_width() 用来获取宽度的值。和上面的区别在于,一个表明某个坐标系对象,一个用来获取坐标系对象的值对象
[self.yellowView mas_makeConstraints:^(MASConstraintMaker *make) { ip
make.left.equalTo(self.view).with.offset(10); 开发
make.top.equalTo(self.view).with.offset(10);
make.right.equalTo(self.view).with.offset(-10);
make.bottom.equalTo(self.view).with.offset(-10);
}];
[self.blueView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(self.view).with.insets(UIEdgeInsetsMake(10, 10, 10, 10));
}];
[self.greenView mas_updateConstraints:^(MASConstraintMaker *make) { make.size.mas_equalTo(CGSizeMake(100, 100)); }];
[self.textLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.center.equalTo(self.view); // 设置宽度小于等于200
make.width.lessThanOrEqualTo(@200); // 设置高度大于等于10
make.height.greaterThanOrEqualTo(@(10)); }];
/** 若是想使用基础数据类型当作参数,Masonry为咱们提供了"mas_xx"格式的宏定义。 这些宏定义会将传入的基础数据类型转换为NSNumber类型,这个过程叫作封箱(Auto Boxing)。 "mas_xx"开头的宏定义,内部都是经过MASBoxValue()函数实现的。 这样的宏定义主要有四个,分别是mas_equalTo()、mas_offset()和大于等于、小于等于四个。 */
[self.redView mas_makeConstraints:^(MASConstraintMaker *make) {
make.center.equalTo(self.view);
make.width.mas_equalTo(100);
make.height.mas_equalTo(100); }];
/** Masonry为咱们提供了三个默认的方法,priorityLow()、priorityMedium()、priorityHigh(),这三个方法内部对应着不一样的默认优先级。 除了这三个方法,咱们也能够本身设置优先级的值,能够经过priority()方法来设置。 */
[self.redView 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); }];
// 设置当前约束值乘以多少,例如这个例子是redView的宽度是self.view宽度的0.2倍。
[self.redView mas_makeConstraints:^(MASConstraintMaker *make) {
make.center.equalTo(self.view);
make.height.mas_equalTo(30);
make.width.equalTo(self.view).multipliedBy(0.2); }]
参考文章: