這個庫可以增加開發效率,可以結合其他庫使用。
https://github.com/gwh111/bench_ios
首先一波分析,當前比較成熟的有名的庫Masonry和SDAutoLayout
看一下別人的分析
https://blog.csdn.net/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不清楚不同設備尺寸的影響 你是清楚的 這就是爲什麼要套一層函數的原因(套了函數後面可以全局更改,就算對特定設備做操作也可以) 你無需操心其他設備的適配問題 通過函數都可以微調 只需保證效果圖尺寸的模擬器上看起來和效果圖一樣就可以了。