Masonry是一个封装苹果Autolayout的一个第三方框架。简化了代码添加约束的代码量等。
下载地址:
https://github.com/SnapKit/Masonry
下载完后解压缩,把Masonry这个文件夹拖进项目里就可以了。
下面是一个小小的实例:
先导入头文件:
#import "Masonry/Masonry.h"
UIView *buleView = [[UIView alloc]init];
[buleView setBackgroundColor:[UIColor blueColor]];
[self.view addSubview:buleView];
[buleView mas_makeConstraints:^(MASConstraintMaker *make) {
//大小
make.size.mas_equalTo(CGSizeMake(50, 50));
//位置:居中
make.center.mas_equalTo(self.view);
}];
运行一下,在屏幕中央就有一个50*50的蓝色小方块了。
Masonry里面几个约束的方法:
[buleView mas_makeConstraints:^(MASConstraintMaker *make) {
//添加新约束
}];
[buleView mas_remakeConstraints:^(MASConstraintMaker *make) {
//会把以前的约束删除掉,添加新的约束
}];
[buleView mas_updateConstraints:^(MASConstraintMaker *make) {
//更新以前的约束
}];
引用Masonry文档的一个例子:
效果是一个view距离父控件上下左右都有10的边距。官方列举了两种写法,第二种直接一句话就能实现效果。
第一种:
UIEdgeInsets padding = UIEdgeInsetsMake(10, 10, 10, 10);
[view1 mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(superview.mas_top).with.offset(padding.top); //with is an optional semantic filler
make.left.equalTo(superview.mas_left).with.offset(padding.left);
make.bottom.equalTo(superview.mas_bottom).with.offset(-padding.bottom);
make.right.equalTo(superview.mas_right).with.offset(-padding.right);
}];
第二种:
[view1 mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(superview).with.insets(padding);
}];
到这里我们会碰到很多mas_前缀和没有这个前缀的东西,他们两个的区别就是带mas_前缀的是有对参数进行封装的,例如:
mas_equalTo(100)
equalTo(@100)
没有mas_前缀的就需要转类型,反之则不用。
如果要使这两个的效果等同,那么Masonry提供了两个宏给我们使用,但是需要注意的是,定义这个宏的时候,要在导入Masonry头文件之前,例如:
//define this constant if you want to enable auto-boxing for default syntax
#define MAS_SHORTHAND_GLOBALS
//define this constant if you want to use Masonry without the 'mas_' prefix
#define MAS_SHORTHAND
#import "Masonry/Masonry.h"
这样就可以了。