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

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

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

不過, 對(duì)于iPhone不同設(shè)備的屏幕適配, 依舊是個(gè)棘手的問題...因?yàn)槊看稳ッ嬖嚩紩?huì)被問到這個(gè)問題, "你是如何用autolayout進(jìn)行適配的?"

這里討論一個(gè)比較常見的情況.

Example 1: TableViewCell里的兩個(gè)label并列

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

圖1 ?理想中的UI界面

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

圖2 實(shí)際中的UI界面

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

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

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

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

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

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

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

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

圖6 label2的文字特別長, label1會(huì)被擠掉

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

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

得到我們想要的UI界面:

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

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

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

點(diǎn)擊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. 所以, 此時(shí)label1與superView的倍數(shù)關(guān)系式為 label.width >= 0.3*Cell.width. 成功實(shí)現(xiàn)了最小寬度隨著屏幕寬度變化的要求.


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

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末陶因,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌媒鼓,老刑警劉巖躏鱼,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件筑悴,死亡現(xiàn)場(chǎng)離奇詭異戈锻,居然都是意外死亡宝鼓,警方通過查閱死者的電腦和手機(jī)也搓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門赏廓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人傍妒,你說我怎么就攤上這事幔摸。” “怎么了颤练?”我有些...
    開封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵既忆,是天一觀的道長。 經(jīng)常有香客問我嗦玖,道長患雇,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任宇挫,我火速辦了婚禮苛吱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘器瘪。我一直安慰自己翠储,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開白布娱局。 她就那樣靜靜地躺著彰亥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪衰齐。 梳的紋絲不亂的頭發(fā)上任斋,一...
    開封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼废酷。 笑死瘟檩,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的澈蟆。 我是一名探鬼主播墨辛,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼趴俘!你這毒婦竟也來了睹簇?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤寥闪,失蹤者是張志新(化名)和其女友劉穎太惠,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體疲憋,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡凿渊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了缚柳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片埃脏。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖秋忙,靈堂內(nèi)的尸體忽然破棺而出彩掐,到底是詐尸還是另有隱情,我是刑警寧澤翰绊,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布佩谷,位于F島的核電站,受9級(jí)特大地震影響监嗜,放射性物質(zhì)發(fā)生泄漏谐檀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一裁奇、第九天 我趴在偏房一處隱蔽的房頂上張望桐猬。 院中可真熱鬧,春花似錦刽肠、人聲如沸溃肪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽惫撰。三九已至,卻和暖如春躺涝,著一層夾襖步出監(jiān)牢的瞬間厨钻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留夯膀,地道東北人诗充。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像诱建,于是被迫代替她去往敵國和親蝴蜓。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 項(xiàng)目里的布局一直都是純代碼流俺猿,順帶著Autolayout也一直沒有使用茎匠,直到遇到了masonry,讓我看到了希望辜荠,...
    小笨狼閱讀 9,286評(píng)論 25 128
  • 1.尺寸適配1.原因 iOS7中所有導(dǎo)航欄都為半透明汽抚,導(dǎo)航欄(height=44)和狀態(tài)欄(height=20)不...
    LZM輪回閱讀 6,122評(píng)論 1 4
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件伯病、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,120評(píng)論 4 61
  • 翻譯自“Auto Layout Guide”。 1 入門 1.1 理解自動(dòng)布局 自動(dòng)布局根據(jù)視圖層級(jí)結(jié)構(gòu)中視圖上的...
    lakerszhy閱讀 3,593評(píng)論 3 26
  • 古時(shí)包公賞罰明否过,公正廉潔入人心午笛。皇帝愛才彰天恩苗桂,特要為其做大壽药磺。包公不敢違上意,轉(zhuǎn)囑府人莫收禮煤伟。 一日忽至送花客癌佩,...
    拓桑閱讀 411評(píng)論 3 4