AutoLayout魔法 - Hugging 和 Compression

huizaichen 8年前發布 | 8K 次閱讀 iOS開發 移動開發 AutoLayout

來自: http://www.liuchendi.com/2016/01/29/iOS/35_hugging-and-compression-resistance/

用AutoLayout也有一段時間了, 之前一直都不是很理解 Content Hugging 和 Content Compression 的優先級。今天就把這個問題給解決了,到底這兩個東西要怎么用?這篇文章算是學習筆記吧

Intrinsic Content Size

在學習這兩個東西前,首先得明白 Intrinsic Content Size 的概念,字面上的意思就是固定大小,也就是控件自身內置的大小。像 UIView 、 UILabel 、 UIButton 等控件,這些控件的內置大小是根據控件本身內容決定的。 我們應該都做過Cell動態高度的計算,Label的高可以根據內容的大小來計算。

優先級

首先在Storyboard里面拉一個UILabel,可以看到默認的 Hugging 優先級是251, Compression 優先級是750。并且提供了水平和垂直兩個方向的設置

優先級的取值范圍在1-1000。提供了默認的優先級選項

  • Low: 優先級是1
  • High: 優先級是750
  • Required: 優先級是1000

Content Hugging 和 Content Compression 區別

借用網上的一張圖片來說明兩者的不同,圖片出自 這里

Content Hugging : 代表的是拉伸難易程度,優先級越高,越難拉伸 Content Compression: 代表的是壓縮難易程度,優先級越高,越難壓縮

練習例子

1、水平放置三個Label,彼此間有間距。第一個Label會根據屏幕寬度的不同自動拉伸,另外兩個不受影響。

首先不受影響的話,后面兩個Label的優先級應該是一樣的,并且要大于第一個的優先級,這樣才能保證不容易拉伸。

布局是這個樣子的

豎屏結果是:

橫屏結果是:

2、水平放置兩個Label,第一個Label的Compression優先級比第二個低。

布局是這個樣子的

豎屏結果是:

橫屏結果是:

因為壓縮優先級低于第二個,所以第一個在豎屏的時候被壓縮了

3、那接上一個的練習,如果第一個Label的優先級大于第二個,結果又會是怎么樣呢?

豎屏的結果是

橫屏的結果是

可以看到因為第一個Label的優先級比較高,所以難以壓縮,把第二個Label直接擠沒了。在橫屏的時候才可以顯示完全

參考資料

1、 http://krakendev.io/blog/autolayout-magic-like-harry-potter-but-real

2、 https://www.mgenware.com/blog/?p=491

3、 http://c0ming.me/content-hugging-and-compression-resistance/

</div>

 本文由用戶 huizaichen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!