一 常用方法介绍
masonry 自动帮我们把 autoresizing给禁用掉
这两个宏定义要放到导入头文件之前
//define this constant if you want to use Masonry without the 'mas_' prefix
#define MAS_SHORTHAND
//define this constant if you want to enable auto-boxing for default syntax
#define MAS_SHORTHAND_GLOBALS
// 导入头文件
#import "Masonry.h"
创建约束 makeConstraints:
更新约束 (只会对指定的约束进行更新) updateConstraints:
重设约束 (是会把之前的约束都清空掉, 然后应用新的约束) remakeConstraints:
优先级的设置 make.height.equalTo(40).priority(10);
二 使用示例
#define kSmallMargin5
// remakeConstraints 如果在之前设置过有冲突,就用这个方法重置
第一种方式
[redView mas_makeConstraints:^(MASConstraintMaker *make) {
// make就相当于redView,要做约束的时候,都需要针对make来做
//顶部的约束
make.top.mas_equalTo(self.view.mas_top).offset(20);
//右侧的约束
make.right.mas_equalTo(self.view.mas_right).offset(-20);
//左侧的约束
make.left.mas_equalTo(self.view.mas_left).offset(20);
//高度的约束
make.height.mas_equalTo(40);
}];
第二种方式
如果被约束view的属性和参照view的属性一致的话,就可以把参照view的属性给省略掉
equalTo() :不能自动转换类型(自动装箱)
[redView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.view).offset(20);
make.left.equalTo(self.view).offset(20);
make.right.equalTo(self.view).offset(-20);
// equalTo不会自动的把基本数据类型,转为id
make.height.equalTo(@40);
}];
第三种方式
如果被约束的view和参照view是父子关系,可以把参照view给省略掉(属性也要一致)
[redView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.offset(20);
make.left.offset(20);
make.right.offset(-20);
make.height.equalTo(@40);
}];
第四种方式
如果不同属性设置的约束是相同的,就可以通过.语法进行链接
[redView mas_makeConstraints:^(MASConstraintMaker *make) {
//make.top.left.offset(20);
make.top.and.left.offset(20);
make.right.offset(-20);
make.height.equalTo(@40);
}];
第五种写法
可以针对内边距进行设置
[redView mas_makeConstraints:^(MASConstraintMaker *make) {
NSValue *edges = [NSValue valueWithUIEdgeInsets:UIEdgeInsetsMake(20, 20, 20, 20)];
make.edges.equalTo(edges);
}];
第六种写法
一旦定义完之后,就可以实现类型的自动转换
#define MAS_SHORTHAND_GLOBALS
[redView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(UIEdgeInsetsMake(20, 20, 20, 20));
}];
#define MAS_SHORTHAND可以省略掉mas_前缀
[redView makeConstraints:^(MASConstraintMaker *make) {
make.top.left.offset(20);
make.right.offset(-20);
make.height.equalTo(40);
}];