在使用storyboard進行UI布局時,我們經常不經意間會注意到“Content Compression Resistance Priority”和“Content Hugging Priority”這兩個屬性熄云。
下面給大家簡單介紹下這兩個小家伙:
首先,我們得先來了解下另一個屬性intrinsic size(固有尺寸)匀借,一個根據自身內容大小而決定的尺寸误墓。我們都知道,UIButton溅固、UILabel等尔邓,在布局時并不需要給它們設置所有constraints灾常,只需要設置 leading space 和 top space 等能決定 X跟Y的constraints 就能夠進行布局,這就是它們的intrinsic size在起作用铃拇,決定它們的寬高钞瀑。
那么,“Content Compression Resistance Priority”和“Content Hugging Priority”這兩個小家伙跟intrinsic size有什么淵源慷荔?
在開發(fā)中雕什,我們難免會同時對兩個UILabel或者UIButton進行布局,比如水平并行布局显晶,或者垂直并行布局:
我只是簡單的為它們添加了決定x和y的constraints贷岸,并沒有給他們其他設置,按照我們剛才講的intrinsic size(固有尺寸)兩個label應該在除了x和y不同外磷雇,寬高保持一致偿警。但是,正如你我所見唯笙,在storyboard上螟蒸,兩個label寬高并不一樣。水平并行的label寬度不同崩掘,垂直并行的label高度不同七嫌。可見苞慢,intrinsic size(固有尺寸)在同時對多個label進行布局時并不顯得那么夠诵原!
產生這樣的效果的原因是:
1. 在水平并行布局中,兩個label的intrinsic size(固有尺寸)加起來比它們的父view(圖中藍色的view)還要寬,因此父view沒辦法完全展示它們绍赛,只能通過壓縮它們來實現蔓纠;
2. 而在垂直并行布局中,兩個label的intrinsic size(固有尺寸)加起來并沒有它們的父view那么高吗蚌,父view為了展示他們腿倚,只能將它們拉伸。
通過上圖褪测,我們清楚的看到,系統(tǒng)并不是同時對兩個label進行壓縮或者拉伸潦刃,而是只針對其中一個侮措。這就是intrinsic size(固有尺寸)跟“Content Compression Resistance Priority”和“Content Hugging Priority”這兩個小家伙的關系了。
“Content Compression Resistance Priority”乖杠,也叫內容壓縮阻力優(yōu)先級(小名:別擠我)分扎,該優(yōu)先級越高,則越晚輪到被壓縮胧洒。
“Content Hugging Priority”畏吓,也叫內容緊靠優(yōu)先級(小名:別扯我),該優(yōu)先級越高卫漫,這越晚輪到被拉伸菲饼。
因此,在父view大小不夠布局子label時列赎,我們可以通過增加某個label的Content Compression Resistance Priority(內容壓縮阻力優(yōu)先級)來防止被壓縮宏悦。當然降低自身則可以讓自己被壓縮。
同理包吝,在父view大小太大時饼煞,我們可以通過增加label的Content Hugging Priority(內容緊靠優(yōu)先級)來防止被拉伸。降低則可以達到被拉伸的目的诗越。
歡迎大家拍磚交流