前言
雖然用了很久的xib,但是每次都在比例佈局要處理很久,這次,就一次性解決它吧,反正有時間研究黑科技!
以前的處理方式
先說純程式碼佈局,無論是直接用frame佈局還是Masorny還是SnapKit或多或少有涉及到根據螢幕寬還是高(一般是寬,何況現在還有不成比例的iPhoneX,更要用寬,拋棄iPhone4)來調整控制元件frame或者約束;
再說用storyBoard和xib,用autoLayout做佈局的時候,有兩種做比例的方法,一個是把約束拖出來屬性控制,一個直接在視覺化介面進行約束的比例設定,簡單看一下
上圖對top設定距離父試圖137的距離
改成比例處理就把父試圖的top改成bottom(bottom在視覺化檢視裡是667的高度,實際是667-tabbar高度49),再設定距離137/618
距離父試圖的約束好搞,寬高的比例約束也好搞,但是子檢視之間的約束不好搞,我們來看一下
ui要求間距
設定距離步數11畫素
然後改成比例設定
先獲取平級約束關係檢視的最大Y
最大y是182.5
然後約束距離11/182.5= 0.06
然後再1- 0.06 = 0.94
先調轉約束關係
清零constant和設定比例0.94
上述兩種方式,無論哪種都失去了視覺化工具的有點,快速方便
還有維護迭代介面更改都不好處理。
現在要怎麼做
現在的做法只需要新增這麼一段程式碼執行就可以全面比例控制元件的約束constant,視覺化介面的約束正常使用就可以了
在建立完控制元件後呼叫控制器裡的fixLayoutConstant(view:self.view)
注意事項:
一些舊程式碼用的螢幕寬高來比例的這些約束,使用了上述程式碼會調整constant值,所以有很多注意的地方要自己去看適不適合用,已經用了比例約束的介面就不需要再改了,所以也不建議把這個方法放在全域性建立完控制元件後去呼叫,建議單獨選擇去呼叫吧!
升級一下,更多比例化
也可以對view做label型別的判斷,處理字號,
對圓角view.layer.cornerRadius做比例處理。
結尾
寫這篇文章前,很少在網上看到有類似的處理方法,不知道為什麼,難道你們都用純程式碼嗎?