在我們平常開發(fā)中,有很多iOS開發(fā)者使用了AutoLayout,但在我今天閱讀戴銘老師的iOS開發(fā)高手課時,發(fā)現(xiàn)有很多同學不知道戴銘老師所說的一句話“使用 Auto Layout 一定要注意多使用 Compression Resistance Priority 和 Hugging Priority,利用優(yōu)先級的設置,讓布局更加靈活,代碼更少,更易于維護。”下面由我來給大家分享一下具體的用法。
一、應用場景
在我們實際開發(fā)過程中,經(jīng)常會碰到這樣的界面問題:
在上圖中當產(chǎn)品名稱名字過長時,以上約束就會出現(xiàn)產(chǎn)品名稱和日期文字重疊的情況,這時我們希望兩者之間有個8px的間距,于是我們加上了兩者之間的間距為8px,你會發(fā)現(xiàn)xib出現(xiàn)布局報錯了,錯誤如下圖所示。
為什么會出現(xiàn)這種錯誤呢?
這里我給大家舉一個生活中的小例子,我們大家小時候肯定和同桌劃過三八線
桌子的大小是固定的,我們和同桌每個人都想要占用更多的地方,于是我們規(guī)定了寬度為50cm的三八線,當同桌寫字施展不開超越三八線時,我們就會產(chǎn)生了沖突,輕者吵架,重者干仗。。。
這時就需要老師來調節(jié)了,老師就給兩位同學說了:“你們兩個誰在需要寫字放不開的時候,另一個就要讓著點,但是要保障另一個同學的基本學習區(qū)域”,而我們開發(fā)者就相當于老師。
我們可以通過設置Compression Resistance Priority和Hugging Priority來解決這個問題。
二、拉伸優(yōu)先權(Hugging Priority)
如下圖所示,此時將產(chǎn)品名稱Label的Hugging Priority
設置為252,我們會發(fā)現(xiàn)日期Label明顯往左移了,并且被拉伸了,而產(chǎn)品名稱Label的大小剛剛好。
如果我們將產(chǎn)品名稱Label的
Hugging Priority
設置為250,則會出現(xiàn)產(chǎn)品名稱Label被拉伸了,而日期Label大小剛合適。總結:
-
Hugging Priority
的默認值在水平方向和垂直方向都為251 - 如果兩個Label在同一水平或垂直方向上,誰的
Hugging Priority
值越大誰越不想被拉伸
我們可以對Hugging Priority記憶的時候可以這樣記:
誰的Hugging Priority
值越大誰越不想被拉伸
誰的Hugging Priority
值越大誰越不想被拉伸
誰的Hugging Priority
值越大誰越不想被拉伸
重要的事情說三遍!!!
接著我們來運行看一下效果
OMG !!!這是什么鬼,這顯然不是我們想要的效果,我們期望的是產(chǎn)品名稱Label和日期Label能夠同時正常顯示。
這時Compression Resistance Priority
就需要登場了。
三、壓縮阻力優(yōu)先權(Compression Resistance Priority)
為什么日期Label不能夠全部顯示呢?
原因就在于產(chǎn)品名稱Label的拉伸導致把日期Label壓縮了,產(chǎn)品名稱Label和日期Label的Compression Resistance Priority
默認值都是750,因此產(chǎn)品名稱Label是不會讓著日期Label的。
既然產(chǎn)品名稱Label是不讓著日期Label,那么我們就把日期Label不想被壓縮的值調大一些(至少要比產(chǎn)品名稱Label的大)。如下圖所示:
此時我們在xib中看不到什么變化,但當我們運行起來時,奇跡就發(fā)生了??
bingo!!!我們實現(xiàn)了我們期望的效果??
總結:
-
Compression Resistance Priority
的默認值在水平方向和垂直方向都為750 - 如果兩個Label在同一水平或垂直方向上,誰的
Compression Resistance Priority
值越大誰越不想被壓縮
我們可以對Compression Resistance Priority記憶的時候可以這樣記:
誰的Compression Resistance Priority
值越大誰越不想被壓縮
誰的Compression Resistance Priority
值越大誰越不想被壓縮
誰的Compression Resistance Priority
值越大誰越不想被壓縮
重要的事情說三遍!!!