UILabel的抗壓縮、抗拉伸、以及控件的約束簡述


今天來說一說UILabel的約束設置問題

首先主要介紹:Priority(控件約束的優先級)Content Hugging Priority(控件抗拉伸優先級)Content Compression Resistance Priority(控件抗壓縮優先級),好的,開始一個個介紹。

1.Priority控件中每一個約束都有優先級,在xibstoryboard中很容易看到,如圖:

 

在這里可以設置約束的優先級,優先級的取值范圍是1~1000,控件的約束會有限滿足優先級高的,控件的約束默認都是1000。

2.Content Hugging Priority(控件抗拉伸優先級) 優先級越高越不容易被拉伸,默認是250。

3.Content Compression Resistance Priority(控件抗壓縮優先級) 和拉伸一樣,優先級越高的越不容易和壓縮,默認是750。

上面只是簡單介紹一下,下面進入演練中。

在view中添加一個label,設置約束左:150,右150,垂直居中,最好給label設置背景顏色,這樣比較容易看清label的長度。

運行之后,顯示為

為什么會顯示成這個樣子,我們的label的居然被壓縮了,這並不是我們想要的結果,原因請接着往下看。

Content Compression Resistance Priority(抗壓縮的優先級)是750,而我們控件約束默認的是1000,此時肯定會先滿足控件約束的,所以label被壓縮了。要體現抗壓縮性也就是說label不被壓縮這時要將label的左或者右約束優先級設置小於750。此時就會先滿足抗壓縮,控件的約束就先放一邊了。我是將label的右約束優先級改成650了,顯示結果為:

 

好了,肯定會有小伙伴罵我,我靠,這什么鬼,不要驚訝,這是正常的,因為我設置的約束有點大了,並且文字沒換行,小伙伴們可以自己調試一下,多動手才能印象深刻。

接下來演示被拉伸的效果。

此時我們設置label的左右距屏幕邊約束為60,優先級設置默認的1000,顯示結果為:

是的,你會發現label被拉伸了,這是因為label的抗拉伸優先級是250,而label約束的優先級是1000,這是系統肯定會優先考慮label的約束,所以label被拉伸了。當我們設置label右約束為240時,當然也可以設置左側,注意:可以同時設置左右約束的優先級,但是如果你設置的都小於250時,不能讓label的左右的優先級相等,這是為什么呢?因為既然約束的優先級小於抗拉伸的優先級label肯定不會被拉伸,這時label的左右約束優先級還一樣,你讓系統執行那一個約束?如果都執行那就是label被拉伸,如果都不執行label還會顯示嗎?所以這樣設置會當場報錯,看來系統也是很明智的。好了,正確設置完之后結果會顯示這樣:

這樣label沒有被拉伸,顯示了它的固有尺寸。

把自己的理解寫出了,有不對的地方請小伙伴們指正。

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM