什么是Masonry
Masonry是一个对系统NSLayoutConstraint进行封装的第三方自动布局框架,采用链式编程的方式提供给开发者API。系统AutoLayout支持的操作,Masonry都支持,相比系统API功能来说,Masonry是有过之而无不及。
Masonry采取链式编程的方式,代码理解起来清晰易懂,而且写完之后代码量看起来非常少。之前用NSLayoutConstraint写很多代码才能实现的布局,用Masonry最少一行代码就可以搞定。
Masony是同时支持Mac和ios两个平台的,在这两个平台都可以使用Masonry进行自动布局。在MASUtilities.h中可以看到区分平台的关键字。
// MASUtilities.h
#if TARGET_OS_IPHONE || TARGET_OS_TV
#import <UIKit/UIKit.h>
#define MAS_VIEW UIView
#define MAS_VIEW_CONTROLLER UIViewController
#define MASEdgeInsets UIEdgeInsets
#elif TARGET_OS_MAC
#import <AppKit/AppKit.h>
#define MAS_VIEW NSView
#define MASEdgeInsets NSEdgeInsets
#endif
集成方式
Masonry支持CocoaPods,可以直接通过podfile文件进行集成,需要在CocoaPods中添加如下代码即可:
pod 'Masonry'
使用Masonry注意事项
- 在使用Masonry添加约束之前,需要在addSubview之后才能使用,否则会导致崩溃
- 在添加约束时常见的问题一般有两种:约束冲突和缺少约束。对于这两种问题可以通过调试和log排查
Masonry使用
基础API
mas_makeConstraints() 添加约束
mas_remakeConstraints() 移除之前的约束,重新添加新的约束
mas_updateConstraints() 更新约束
equalTo() 参数是对象类型,一般是视图对象或者mas_width这样的坐标对象
mas_equalTo() 和上面功能相同,参数可以传递基础数据类型对象,可以理解为比上面的API更强大
width() 用来表示宽度,例如代表view的宽度
mas_width() 用来获取宽度的值。和上边的区别在于,一个代表某个坐标系对象,一个用来获取坐标系对象的值
Auto Boxing
上面例如equalTo或者width这样的,有时候需要涉及到使用mas_前缀,这在开发中需要注意做区分。
如果在当前类引入#import "Masonry.h"之前,用下