在如今的iOS开发中,Autolayout已经是不得不使用了,而且是我们主动的去拥抱Autolayout。使用Autolayout最普遍的方式就是在xib或者storyboard中可视化的添加各种约束,这也是Autolayout入门需要掌握的,关于这部分内容,可以参考《iOS开发——Autolayout的实践与技巧》这篇博客。对于比较简单的App开发,可能使用可视化Autolayout也就足够了。但是如果UI布局稍微复杂多变一点,那么就不得不使用代码了。对于iOS原生的代码自动布局,真的是过于繁琐。所以这里就要来介绍目前广泛使用的第三方库Masonry的使用,入门非常的方便简单。也是一位合格的iOS开发者需要掌握的。博客案例代码上传至 https://github.com/chenyufeng1991/MasonryLearnDemo 。
(1)使用Cocoapods导入Masonry,对于如何使用Cocoapods,请参考《iOS包管理工具Cocoapods的安装与使用》这篇博客。Podfile文件如下:
platform:ios,'8.0'
pod 'Masonry'
(2)先对Masonry中的内容做一个简单的介绍:
Masonry中有三种添加约束的方法:
- (NSArray *)mas_makeConstraint:(void(^)(MASConstraintMaker *))block;
- (NSArray *)mas_updateConstraint:(void(^)(MASConstraintMaker *))block;
- (NSArray *)mas_remakeConstraint:(void(^)(MASConstraintMaker *))block;
mas_makeConstraint:只负责新增约束,初次设置约束使用;
mas_updateConstraint:更新block中出现的约束,如果找不到该约束,会新增约束。
mas_remakeConstraint:清除之前的所有约束,仅保留最新的约束。
(3)equalTo和mas_equalTo的区别
其实mas_equalTo是一个宏,源码中是这样定义的:
#define mas_equalTo(...) equalTo(MASBoxValue((__VA_ARGS__)))
#define mas_greaterThanOrEqualTo(...) greaterThanOrEqualTo(MASBoxValue((__VA_ARGS__)))
#define mas_lessThanOrEqualTo(...) lessThanOrEqualTo(MASBoxValue((__VA_ARGS__)))
#define mas_offset(...) valueOffset(MASBoxValue((__VA_ARGS__)))
MAS_SHORTHAND宏:定义了MAS_SHORTHAND宏之后,就可以使用UIView,NSArray中不带mas_前缀的makeConstraint,updateConstraint,remakeConstraint方法,以及UIView中不带mas_前缀的Attribute。
MAS_SHORTHAND_GLOBALS:直接对equalTo传入基础类型,Masonry自动转化为NSValue对象。
(4)比例系数与常数系数
multipliedBy(0.5)可以用来设置比例系数。
Masonry有四种设置Constant的方法:
- (MASConstraint * (^)(MASEdgeInsets insets))insets;
- (MASConstraint * (^)(CGSize offset))sizeOffset;
- (MASConstraint * (^)(CGPoint offset))centerOffset;
- (MASConstraint * (^)(CGFloat offset))offset;
insets方法可以同时设置top,left,bottom,right,接收MASEdgeInsets类型,也就是UiEdgeInsets类型,使用UIEdgeInetMake方法设置。
sizeOffset方法设置width,height,接收CGSize类型,使用CGSizeMake方法设置。
centerOffset方法设置centerX(X轴中心),centerY(Y轴中心)。
offset方法可以设置所有的偏移常量。
(5)对于一个约束,实际表示的是不等或者相等关系:
aView.Leading = 1.0 * bView.Trailing + 10;
其中:
aView :Item1