第三方框架-纯代码布局:Masonry的简单使用

Masonry是一个对系统NSLayoutConstraint进行封装的第三方自动布局框架,采用链式编程的方式提供给开发者API。系统AutoLayout支持的操做,Masonry都支持,相比系统API功能来讲,Masonry是有过之而无不及。

Masonry采起了链式编程的方式,代码理解起来很是清晰易懂,并且写完以后代码量看起来很是少。以前用NSLayoutConstraint写不少代码才能实现的布局,用Masonry最少一行代码就能够搞定。下面看到Masonry的代码就会发现,太简单易懂了。编程

Masonry基础API

mas_makeConstraints()  添加约束 框架

mas_remakeConstraints()  移除以前的约束,从新添加新的约束 less

mas_updateConstraints()  更新约束,写哪条更新哪条,其余约束不变 函数

equalTo()  参数是对象类型,通常是视图对象或者mas_width这样的坐标系对象 布局

mas_equalTo()  和上面功能相同,参数能够传递基础数据类型对象,能够理解为比上面的API更强大 ui

width()  用来表示宽度,例如表明view的宽度 spa

mas_width()  用来获取宽度的值。和上面的区别在于,一个表明某个坐标系对象,一个用来获取坐标系对象的值对象

view的requiresConstraintBasedLayout方法--若是你在- (void)updateConstraints这个方法里面给自定义的控件更新控件的constraint,那么须要重写+ (BOOL)requiresConstraintBasedLayout方法,而且返回YES.不然的话,就不会显示该控件。若是直接在init方法中设置自定义控件的constraint,那么则不须要重写+ (BOOL)requiresConstraintBasedLayout方法,也能够显示。

更新约束和布局

- (void)setNeedsUpdateConstraints  标记须要进行从新布局
- (void)updateConstraintsIfNeeded  调用此方法,若是有标记为须要从新布局的约束,则当即进行从新布局,内部会调用updateConstraints方法
- (void)updateConstraints  重写此方法,内部实现自定义布局过程
- (BOOL)needsUpdateConstraints  当前是否须要从新布局,内部会判断当前有没有被标记的约束
关于UIView从新布局相关的API,主要用如下三个API:
- (void)setNeedsLayout  标记为须要从新布局
- (void)layoutIfNeeded  查看当前视图是否被标记须要从新布局,有则在内部调用layoutSubviews方法进行从新布局 
- (void)layoutSubviews  重写当前方法,在内部完成从新布局操做

Masonry经常使用方法

设置内边距

[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); }]

参考文章:

iOS自动布局框架-Masonry详解

相关文章
相关标签/搜索