相比较Masonry与SDAutoLayout,使用心得
使用方法官方demo 都非常清晰,本文仅从原理及对比角度来看使用。
目录:
- 相比较Masonry与SDAutoLayout
- 及时刷新依赖性
- 基本原理
- 使用便易性
- 思想
- SDAutoLayout基本原理
- Masonry基本原理
相比较Masonry与SDAutoLayout
-
及时刷新:SDAutoLayout需要依赖顺序,调换相对位置的控件,需要先写好依赖控件约束,否则无法及时刷新(举例:简书 愤怒的振振)。修改UI而言Masonry更为方便调换控件位置。
-
基本原理:SDAutoLayout修改的是frame, Masonry改变的是NSLayoutConstraint
-
在写相对多个约束的时候,Masonry有属性直接使用会更容易。而自动计算视图高度和cell时,SDAutoLayout更简单以传入model自动计算布局。
- SDAutoLayout:面向对象编程思想。Masonry:链式编程思想(链式编程的方法调用返回的是Block,而且调用完Block之后必然会有返回值(该返回值就是操作对象本身),这样才能链式调用,而且Block的参数就是需要内部对象操作的值. 参考博文
SDAutoLayout
基本原理:
1.sd_layout属性:使用动态关联,扩展UIView, 调用getter方法时sd_layout对象生成,此对象作为view对象的布局控制模块, 每次生成一个sd_layout对象,都把它加为super view的autolayoutModelsArray中,sd_layout对象即SDAutoLyaout的实例,SDAutoLayout下设left, top, bottom, right等对象负责具体的布局
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
分析:相当于我们调用懒加载的block来改变frame.(所以多次改变已经用约束布局了都xib后,有时sdautolayout不能改掉布局,或者改变了但是显示并没有及时更新,需要再调用updateLayout甚至需要先 clearlayout)
2.缓存frame
Masonry
基本原理:
1.基于NSLayoutConstraint
2.使用方法为block
3.关于链式编程思想
不考虑调用顺序,只在乎结果,事件分发出去,只要有人监听,就能进行下一步操作,KVO就是这样.对象的方法调用没有参数返回值必须是Block,然后调用Block,Block的返回值就是对象,循环进行再次调用,最终内部传参的对象把结果存储在属性字段中,可以根据函数返回值返回出来,打印最终需要的结果
Deft_MKJing宓珂璟的博客:Masonry链式编程思想的基本思路以及KVO底层的响应式编程
官方sample code ,链式思想:
- 1
- 2
- 3
使用注意点:
- mas_makeConstraints 只负责新增约束 Autolayout不能同时存在两条针对于同一对象的约束 否则会报错
- mas_updateConstraints 针对上面的情况 会更新在block中出现的约束 不会导致出现两个相同约束的情况
- mas_remakeConstraints 则会清除之前的所有约束 仅保留最新的约束
三种函数善加利用 就可以应对各种情况了
转载:http://blog.csdn.net/u012411480/article/details/78034038