IOS开发之Autolayout——“Content Compression Resistance”和“Content Hugging”
在使用storyboard進(jìn)行UI布局時(shí),我們經(jīng)常不經(jīng)意間會(huì)注意到“Content Compression Resistance Priority”和“Content Hugging Priority”這兩個(gè)屬性。
下面給大家簡(jiǎn)單介紹下這兩個(gè)小家伙:
首先,我們得先來(lái)了解下另一個(gè)屬性intrinsic size(固有尺寸),一個(gè)根據(jù)自身內(nèi)容大小而決定的尺寸。我們都知道,UIButton、UILabel等,在布局時(shí)并不需要給它們?cè)O(shè)置所有constraints,只需要設(shè)置 leading space 和 top space 等能決定 X跟Y的constraints 就能夠進(jìn)行布局,這就是它們的intrinsic size在起作用,決定它們的寬高。
那么,“Content Compression Resistance Priority”和“Content Hugging Priority”這兩個(gè)小家伙跟intrinsic size有什么淵源?
在開(kāi)發(fā)中,我們難免會(huì)同時(shí)對(duì)兩個(gè)UILabel或者UIButton進(jìn)行布局,比如水平并行布局,或者垂直并行布局:
我只是簡(jiǎn)單的為它們添加了決定x和y的constraints,并沒(méi)有給他們其他設(shè)置,按照我們剛才講的intrinsic size(固有尺寸)兩個(gè)label應(yīng)該在除了x和y不同外,寬高保持一致。但是,正如你我所見(jiàn),在storyboard上,兩個(gè)label寬高并不一樣。水平并行的label寬度不同,垂直并行的label高度不同。可見(jiàn),intrinsic size(固有尺寸)在同時(shí)對(duì)多個(gè)label進(jìn)行布局時(shí)并不顯得那么夠!
產(chǎn)生這樣的效果的原因是:
1. 在水平并行布局中,兩個(gè)label的intrinsic size(固有尺寸)加起來(lái)比它們的父view(圖中藍(lán)色的view)還要寬,因此父view沒(méi)辦法完全展示它們,只能通過(guò)壓縮它們來(lái)實(shí)現(xiàn);
2. 而在垂直并行布局中,兩個(gè)label的intrinsic size(固有尺寸)加起來(lái)并沒(méi)有它們的父view那么高,父view為了展示他們,只能將它們拉伸。
通過(guò)上圖,我們清楚的看到,系統(tǒng)并不是同時(shí)對(duì)兩個(gè)label進(jìn)行壓縮或者拉伸,而是只針對(duì)其中一個(gè)。這就是intrinsic size(固有尺寸)跟“Content Compression Resistance Priority”和“Content Hugging Priority”這兩個(gè)小家伙的關(guān)系了。
“Content Compression Resistance Priority”,也叫內(nèi)容壓縮阻力優(yōu)先級(jí)(小名:別擠我),該優(yōu)先級(jí)越高,則越晚輪到被壓縮。
“Content Hugging Priority”,也叫內(nèi)容緊靠?jī)?yōu)先級(jí)(小名:別扯我),該優(yōu)先級(jí)越高,這越晚輪到被拉伸。
因此,在父view大小不夠布局子label時(shí),我們可以通過(guò)增加某個(gè)label的Content Compression Resistance Priority(內(nèi)容壓縮阻力優(yōu)先級(jí))來(lái)防止被壓縮。當(dāng)然降低自身則可以讓自己被壓縮。
同理,在父view大小太大時(shí),我們可以通過(guò)增加label的Content Hugging Priority(內(nèi)容緊靠?jī)?yōu)先級(jí))來(lái)防止被拉伸。降低則可以達(dá)到被拉伸的目的。
文/Z哥(簡(jiǎn)書(shū)作者)
原文鏈接:http://www.jianshu.com/p/a4b8e0c8e68d
著作權(quán)歸作者所有,轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),并標(biāo)注“簡(jiǎn)書(shū)作者”。
總結(jié)
以上是生活随笔為你收集整理的IOS开发之Autolayout——“Content Compression Resistance”和“Content Hugging”的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ARKit从入门到精通(11)-ARKi
- 下一篇: 02-Wifi通讯架构介绍