Skip to content

Latest commit

 

History

History
16 lines (8 loc) · 1.2 KB

masonry.md

File metadata and controls

16 lines (8 loc) · 1.2 KB

Masonry

总结

Masonry 如何为视图添加约束(面试回答)?

Masonry 选择了使用分类的方式为 UIKit 添加一个方法 mas_makeConstraint, 这个方法接受了一个 block, 这个 block 有一个 MASConstraintMaker 类型的参数, 这个 maker 会持有一个约束的数组, 这里保存着所有将被加入到视图中的约束。

我们通过链式的语法配置 maker, 设置它的 left right 等属性, 比如说 make.left.equalTo(view), 其实这个 left equalTo 还有像 with offset 之类的方法都会返回一个 MASConstraint 的实例, 所以在这里才可以用类似 Ruby 中链式的语法。

在配置结束后, 首先会调用 makerinstall 方法, 而这个 maker install 方法会遍历其持有的约束数组, 对其中的每一个约束发送 install 消息. 在这里就会使用到在上一步中配置的属性, 初始化 NSLayoutConstraint 的子类 MASLayoutConstraint 并添加到合适的视图上。

视图的选择会通过调用一个方法 mas_closestCommonSuperview: 来返回两个视图的最近公共父视图。

iOS 源代码分析----Masonry