在使用storyboard進(jìn)行UI布局時(shí),我們經(jīng)常不經(jīng)意間會(huì)注意到“Content Compression Resistance Priority”和“Content Hugging Priority”這兩個(gè)屬性枝恋。
下面給大家簡(jiǎn)單介紹下這兩個(gè)小家伙:
首先创倔,我們得先來了解下另一個(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有什么淵源偎漫?
在開發(fā)中爷恳,我們難免會(huì)同時(shí)對(duì)兩個(gè)UILabel或者UIButton進(jìn)行布局,比如水平并行布局象踊,或者垂直并行布局:
我只是簡(jiǎn)單的為它們添加了決定x和y的constraints温亲,并沒有給他們其他設(shè)置棚壁,按照我們剛才講的intrinsic size(固有尺寸)兩個(gè)label應(yīng)該在除了x和y不同外,寬高保持一致栈虚。但是袖外,正如你我所見,在storyboard上魂务,兩個(gè)label寬高并不一樣曼验。水平并行的label寬度不同,垂直并行的label高度不同粘姜△拚眨可見,intrinsic size(固有尺寸)在同時(shí)對(duì)多個(gè)label進(jìn)行布局時(shí)并不顯得那么夠孤紧!
產(chǎn)生這樣的效果的原因是:
1. 在水平并行布局中豺裆,兩個(gè)label的intrinsic size(固有尺寸)加起來比它們的父view(圖中藍(lán)色的view)還要寬,因此父view沒辦法完全展示它們号显,只能通過壓縮它們來實(shí)現(xiàn)臭猜;
2. 而在垂直并行布局中,兩個(gè)label的intrinsic size(固有尺寸)加起來并沒有它們的父view那么高咙轩,父view為了展示他們获讳,只能將它們拉伸。
通過上圖活喊,我們清楚的看到丐膝,系統(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í),我們可以通過增加某個(gè)label的Content Compression Resistance Priority(內(nèi)容壓縮阻力優(yōu)先級(jí))來防止被壓縮岸啡。當(dāng)然降低自身則可以讓自己被壓縮原叮。
同理,在父view大小太大時(shí),我們可以通過增加label的Content Hugging Priority(內(nèi)容緊靠?jī)?yōu)先級(jí))來防止被拉伸奋隶。降低則可以達(dá)到被拉伸的目的擂送。
歡迎大家拍磚交流
作者:Z哥
鏈接:http://www.reibang.com/p/a4b8e0c8e68d
來源:簡(jiǎn)書
簡(jiǎn)書著作權(quán)歸作者所有,任何形式的轉(zhuǎn)載都請(qǐng)聯(lián)系作者獲得授權(quán)并注明出處唯欣。