iOS自適應佈局 Masonry與SDAutoLayout相比較 CC_UIHelper

 

這個庫可以增加開發效率,可以結合其他庫使用。

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不清楚不同設備尺寸的影響 你是清楚的 這就是爲什麼要套一層函數的原因(套了函數後面可以全局更改,就算對特定設備做操作也可以) 你無需操心其他設備的適配問題 通過函數都可以微調 只需保證效果圖尺寸的模擬器上看起來和效果圖一樣就可以了。

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章