關(guān)于Autolayout的暖心tips (一)

剛開始寫UI界面的時候, 經(jīng)驗豐富的iOS程序猿都會推薦用純代碼手寫UI, 并指出Autolayout諸多不足之處: 1)不好維護(hù) 2)產(chǎn)品腦洞大開時, 以前寫的約束很可能要推翻重來 .

其實, 除了這些缺點, 相信大家也越來越多的發(fā)現(xiàn), 其實Autolayout還是很好用的, 好用到根本不想手寫代碼了...

不過, 對于iPhone不同設(shè)備的屏幕適配, 依舊是個棘手的問題...因為每次去面試都會被問到這個問題, "你是如何用autolayout進(jìn)行適配的?"

這里討論一個比較常見的情況.

Example 1: TableViewCell里的兩個label并列

(a) 理想中的UI界面: ?

圖1 ?理想中的UI界面

(b) 實際中的UI界面, 原因: 1) 兩個label的文字寬度偏長 2) 屏幕偏小?

圖2 實際中的UI界面

(c) 增加不等式約束: label1的trailing 與 label2的leading 的水平距離 >= 15;?增加約束后, 默認(rèn)label2 被壓縮, 加省略號...

圖3 增加label間距的不等式約束

(d) 此時若希望label1優(yōu)先被壓縮, 加省略號..?

點擊label1, 在size inspector中, 在添加的各種約束下方, 可以找到Content?Hugging Priority & Content Compression Resistance Priority. 其中, Content Compression Resistance Priority 是"抗壓縮的優(yōu)先級". 默認(rèn)為750. 把優(yōu)先級調(diào)小, 那么就是抗壓縮的等級變小, 容易被壓縮. 反之, 優(yōu)先級高, 不容易被壓縮. 因此, 調(diào)小label1的"抗壓縮的優(yōu)先級",設(shè)為749; label2的不變, 仍為750. ?

圖4 調(diào)小label1的抗壓縮優(yōu)先級

最后, 得到我們想要的UI界面:?

圖5 label1優(yōu)先被壓縮

(e) 接著,考慮一種極端情況, 如果label2的文字特別特別長, 可能就把label1擠沒了... 這并不是我們想要的結(jié)果. 雖然label1優(yōu)先壓縮, 但完全被壓縮,或者被壓縮的太小, 都不是我們想要看到的.

圖6 label2的文字特別長, label1會被擠掉

可以給label1再增加一個寬度Width的約束, 設(shè)置最小寬度minWidth

圖7 設(shè)置label1的最小寬度

得到我們想要的UI界面:

圖8 label1 優(yōu)先壓縮且有最小寬度

(f) 這時處女座不樂意了, minWidth怎么可以是固定值呢? 說好的要屏幕適配, minWidth也要跟著屏幕寬度變化! OK, 這個時候要用上Equal Widths來建立label1與superView的關(guān)系.

圖9 label1與superView的關(guān)系, 選擇Equal Widths

點擊Equal Widths, 并在size inspector中找到該約束, 雙擊, 出現(xiàn)下面界面:

圖10 label1的EqualWidths約束

可以看到, First Item是label.width, Second Item是Cell.width. 將Multiplier改為0.3, Relation改為Greater than or equal. 所以, 此時label1與superView的倍數(shù)關(guān)系式為 label.width >= 0.3*Cell.width. 成功實現(xiàn)了最小寬度隨著屏幕寬度變化的要求.


下節(jié)我們會聊聊不等式約束和妙用優(yōu)先級.

(版權(quán)歸作者所有, 未經(jīng)允許, 禁止轉(zhuǎn)載, 違者必究)

經(jīng)作者授權(quán), 這篇文章也發(fā)表在 swiftcn.io/topics/32 , Swift中國是個很不錯的社區(qū).

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 項目里的布局一直都是純代碼流,順帶著Autolayout也一直沒有使用,直到遇到了masonry,讓我看到了希望,...
    小笨狼閱讀 9,442評論 25 128
  • 1.尺寸適配1.原因 iOS7中所有導(dǎo)航欄都為半透明,導(dǎo)航欄(height=44)和狀態(tài)欄(height=20)不...
    LZM輪回閱讀 6,384評論 1 4
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,186評論 4 61
  • 翻譯自“Auto Layout Guide”。 1 入門 1.1 理解自動布局 自動布局根據(jù)視圖層級結(jié)構(gòu)中視圖上的...
    lakerszhy閱讀 3,922評論 3 26
  • 古時包公賞罰明,公正廉潔入人心?;实蹛鄄耪锰於?,特要為其做大壽。包公不敢違上意,轉(zhuǎn)囑府人莫收禮。 一日忽至送花客,...
    拓桑閱讀 458評論 3 4

友情鏈接更多精彩內(nèi)容