前言
本文將給大家介紹AutoLayout的Content Compression Resistance,說通俗一點就是”檢視的抗壓縮優先順序”.
一. 本篇重點介紹:Content Compression Resistance Priority
許多開發者可能對這個屬性比較陌生,同樣這個屬性對有intrinsic content size的控制元件(例如button,label)非常重要.
注:具有intrinsic content size的控制元件當你設定內容後,它可以根據內容多少來調整自己大小
1. Content Compression Resistance Priority:
檢視抗壓縮優先順序,
值越小,檢視越容易被壓縮
2. 使用場景:
當一個檢視上有多個intrinsic content size的子檢視動態尺寸,並且子檢視可能超出父檢視區域時,此屬性可控制哪些檢視被內容被優先壓縮.使其不超出父檢視區域.
3. Content Compression Resistance Priority在約束介面如下位置:
二. 程式碼示例:
1.新建工程,我們新增一個固定大小的檢視view(此view已新增約束,大小固定),在這個view上放2個label,分別為紅綠,分別對其新增如下約束:
紅label約束:上0,左0,下0
綠label約束:上0,左0,下0,右0
複製程式碼
均不給寬度約束,寬度由label文字多少自己決定,
此時你會發現,新增完以上約束後,會報下面錯誤:
這個錯誤的意思是說:
- 這2個label都是動態寬度,寬度由文字多少決定(未新增寬度約束),
- 當這2個label實際寬度之和小於父view寬度時,AutoLayout不知道優先拉伸哪個label
- 當這2個label實際寬度之和大於父view寬度時,AutoLayout不知道優先壓縮哪個label
- 讓我們新增Content Hugging Priority抗拉伸和Content Compression Resistance抗壓縮優先順序.
下面我們設定這兩個label文字都為”很長很很長很長很長的文字”,使2個label寬度和超過父view寬度,
依次修改這2個label 橫向Content Compression Resistance Priority值分別為:
紅label: Horizontal: 750
綠label: Horizontal: 749
複製程式碼
新增完成後錯誤消失,效果如下:
因為綠色label抗壓縮優先順序為749,(優先順序越小越容易被壓縮),小於紅色label,所有此時可以看到,當二者總寬度超出父view寬度時,綠色label優先被壓縮了
下面我們來調換2個label橫向壓縮優先順序如下:
紅label: Horizontal: 749
綠label: Horizontal: 750
複製程式碼
再來看下效果:
此時,紅色label被壓縮了,紅色abel抗拉伸優先順序小於綠色label(越小越先被壓縮),此時AutoLayout壓縮紅色label內容
三.小結:
Content Compression Resistance 抗壓縮優先順序
優先順序越小,越先被壓縮,
此屬性在多個子檢視動態尺寸,並子檢視內容可能超出父檢視區域時,會起到重要作用,後面會結合例項來詳細介紹.
程式碼地址:github.com/CoderZhuXH/…