iOS AutoLayout進階(二)Content Hugging Priority

朱曉輝Allen發表於2017-12-14

前言

本文將給大家介紹AutoLayout的Content Hugging Priority,說通俗一點就是"檢視的抗拉伸優先順序". 說到Content Hugging Priority不得不提Content Compression Resistance(抗壓縮優先順序),我會在下一篇文章詳細來介紹它

iOS AutoLayout進階(二)Content Hugging Priority

一. 本篇重點介紹:Content Hugging Priority

許多開發者可能對這個屬性比較陌生,這個屬性對有intrinsic content size的控制元件(例如button,label)非常重要. 注:具有intrinsic content size的控制元件當你設定內容後,它可以根據內容多少來調整自己大小.

1. Content Hugging Priority:

抗拉伸優先順序, 值越小,檢視越容易被拉伸

2. 使用場景:

當一個檢視上有多個intrinsic content size的控制元件動態尺寸,在這幾個檢視內容總和,不夠填充父檢視區域時,此屬性可以控制優先拉伸哪個檢視內容.

3. Content Hugging Priority在約束介面如下位置:

Content Hugging Priority.png

二. 程式碼示例:

1.新建工程,我們新增一個固定大小的檢視view,在這個view上放2個label,分別為紅綠,分別對其新增如下約束:

紅label約束:上0,左0,右0
綠label約束:上0,左0,右0,下0
複製程式碼

均不給高度約束,高度由label文字多少自己決定, 此時你會發現,新增完以上約束後,會報下面錯誤:

error.png

這個錯誤的意思是說:

  • 這2個label都是動態高度(未新增高度約束),
  • 當2個label總高度小於父view高度時,AutoLayout不知道優先拉伸哪個label.
  • 當2個label總高度大於父view高度時,AutoLayout不知道優先壓縮哪個label.
  • 讓我們新增Content Hugging Priority抗拉伸和Content Compression Resistance抗壓縮優先順序.

注:本篇文章主要講Content Hugging Priority抗拉伸優先順序, Content Compression Resistance抗壓縮優先順序將放在下一篇文章來詳細介紹)

下面我們依次修改這2個label 縱向Content Hugging Priority值分別為:

紅label: vertical: 252
綠label: vertical: 251
複製程式碼

新增完成後錯誤消失,效果如下:

紅-252,綠-251.png

因為綠色label縱向抗拉伸優先順序為251,小於紅色label的值252,所有當2個label內容不夠填充父檢視區域時,綠色label高度被拉伸了

下面我們來調換2個label縱向拉伸優先順序:

紅label: vertical: 251
綠label: vertical: 252
複製程式碼

來看下效果:

紅-251,綠-252.png

此時,紅色label抗拉伸值小於綠色,所有紅色label被拉伸了

三.小結:

Content Hugging Priority 抗拉伸優先順序 值越小,越容易被拉伸, 此屬性在不手動計算UITableViewCell高度,UITableViewCell動態高度時,會起到重要作用,後面會結合例項來詳細介紹.


程式碼地址:github.com/CoderZhuXH/…

相關文章