三种添加约束的语法:
1. mas_makeConstraints:^(MASConstraintMaker *make){};
这个方法只会添加新的约束,如果重复执行会导致约束冲突。
2. mas_remakeConstraints:^(MASConstraintMaker *make){};
这个方法会将以前的所有约束删掉,添加新的约束。
3. mas_updateConstraints:^(MASConstraintMaker *make){};
这个方法将会覆盖以前的某些特定的约束。
语法示例:
make.size.equalTo(self.view).multipliedBy(0.5); // 被约束控件的宽高等于父控件宽高的一半
make.right.equalTo(self.view).offset(-20); // 被约束控件的右间距距离父控件右边20的距离
// make.right.offset(-20); 上面一行代码也可以简化成这样make.top.equalTo(self.view).offset(20); // 被约束控件的上间距距离父控件的顶部20的距离
make.edges.mas_equalTo(self.view).insets(UIEdgeInsetsMake(50, 50, 50, 50));
// edges表示该控件的四个边界,insets表示内边距,这行代码的意思是使被约束控件的四个边界等于父控件的四个边界加上四个边界值50,显示的效果就是控件的四边都距离父控件50的距离。
mas_equalTo和equalTo的区别:
mas_equalTo会对参数进行包装,equalTo不会对参数进行包装,所以mas_equalTo的功能强于equalTo。
约束的类型(举例):
1.尺寸:width/height/size
2.边界:left/leading/right/trailing/top/bottom
3.中心点:center/centerX/centerY
4.边界:edges
其他用法
利用Masonry写约束时,经常会纠结于要不要加mas_前缀,作者似乎也意识到了这个问题,所以提供了统一去掉mas_前缀的方法:
在导入头文件部分加上两个宏:
//这个宏加上后,可以去掉'mas_'这个前缀了
#define MAS_SHORTHAND
//这个宏加上后,可以去掉自动包装方法的'mas_'前缀
#define MAS_SHORTHAND_GLOBALS
//注意,这两个宏必须定义在这个头文件的上面,因为"Masonry.h"中要用到上面2个宏,如果已经定义过了的话
#import "Masonry.h"
如:
[blueView makeConstraints:^(MASConstraintMaker *make) {
}];
make.width.mas_equalTo(self.view.mas_width).multipliedBy(0.5);
可以替换为
make.width.equalTo(self.view.width).multipliedBy(0.5);
这样是不是更优雅了。
两个控件相互关系
实现代码如下,效果是两个色块并排靠底部显示,宽和高都一样
#import "ViewController.h"
//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"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// 蓝色控件
UIView *blueView = [[UIView alloc] init];
blueView.backgroundColor = [UIColor blueColor];
[self.view addSubview:blueView];
// 红色控件
UIView *redView = [[UIView alloc] init];
redView.backgroundColor = [UIColor redColor];
[self.view addSubview:redView];
// 添加蓝色的约束
[blueView makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self.view.left).offset(20);
make.bottom.equalTo(self.view.bottom).offset(-20);
make.right.equalTo(redView.left).offset(-20);
make.top.equalTo(redView.top);
make.bottom.equalTo(redView.bottom);
make.height.equalTo(50);
make.width.equalTo(redView.width);
}];
// 添加红色的约束
[redView makeConstraints:^(MASConstraintMaker *make) {
make.right.equalTo(self.view.right).offset(-20);
}];
}
@end