这个库可以增加开发效率,可以结合其他库使用。
https://github.com/gwh111/bench_ios
首先一波分析,当前比较成熟的有名的库Masonry和SDAutoLayout
看一下别人的分析
https://blog.youkuaiyun.com/u012411480/article/details/78034038
查看MyLayout的分析,明显frame是最轻便的,但是由于布局自适应不好,比较复杂,大家都不喜欢用
Masonry
https://github.com/SnapKit/Masonry
1.基于NSLayoutConstraint
2.使用方法为block
3.链式编程思想
[view1 mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(superview).with.insets(padding);
}];
要说缺点的话,代码有点多?
SDAutoLayout
https://github.com/gsdios/SDAutoLayout
使用动态关联,扩展UIView, 调用getter方法时sd_layout对象生成,此对象作为view对象的布局控制模块, 每次生成一个sd_layout对象,都把它加为super view的autolayoutModelsArray中,需要先写好依赖控件约束,否则无法及时刷新
对于tableview的cell动态计算高度,做朋友圈类似的很好用,个人不喜欢在cell中计算高度,喜欢先将模型算好高度再取,这样会减少滑动卡顿。
要说缺点的话,布局要按顺序?
总结一下就是两种布局原理
Masonry的工作原理是基于NSLayoutConstraint的,NSLayoutConstraint说到最最底部就是一个数学公式
SDAutoLayout是基于对frame的设置
此外还研究了https://revealapp.com/ 这个东西,他的原理也是添加约束,
刚开始看以为是直接改代码,结果不是
使用的时候通过断点可以打开一个他格式的工程,在里面调整UI,之后更新,可以看到约束,然后再将约束复制到代码xcode代码里起到调整UI的作用,他工程里的样子就是代码跑起来的样子。
因为要切换到他的工程,也不是特别好用,但在一定程度上也是减少了UI调整。
///
我做的事情是
在.pch文件或需要的地方引入
#import "CC_Share.h"
然后初始化布局
//设置基准 效果图的尺寸 比如效果图是iphone6的尺寸
[[CC_UIHelper getInstance]initUIDemoWidth:375 andHeight:667];
初始化好后就可以使用了
这里有两种设备方案:
我们默认采用方案B 所以嵌套getRH和getRFS函数来实现缩放,为什么字体不也用getRH呢?因为字体缩放系数和frame的缩放系数不同,会稍微低一些,如果字体用等比缩放会在小设备看上去适合,但在大屏幕由于放大过多有点像老年机。
如果直接用数字布局frame,包括masonry 只能在一个尺寸看起来合适。
举个例子 你照着ui效果图iphone6尺寸的做好了 ui检查时用的是6p 跑过来和你说尺寸小了 但实际上在6上正好的 然后你吭哧吭哧改了下 ui很满意回去了 过几天另一个ui拿着6跑过来说和效果图对不上了比效果图尺寸大了 然后你又得改 ui不清楚不同设备尺寸的影响 你是清楚的 这就是为什么要套一层函数的原因(套了函数后面可以全局更改,就算对特定设备做操作也可以) 你无需操心其他设备的适配问题 通过函数都可以微调 只需保证效果图尺寸的模拟器上看起来和效果图一样就可以了。