iOS AutoLayout進階(三)Content Compression Resistance Priority

朱曉輝Allen發表於2019-02-21

前言

本文將給大家介紹AutoLayout的Content Compression Resistance,說通俗一點就是”檢視的抗壓縮優先順序”.

iOS AutoLayout進階(三)Content Compression Resistance Priority

一. 本篇重點介紹: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在約束介面如下位置:
Content Compression Resistance.png

二. 程式碼示例:

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

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

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

demo.png

這個錯誤的意思是說:

  • 這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
複製程式碼

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

紅色-750,綠色-749.png

因為綠色label抗壓縮優先順序為749,(優先順序越小越容易被壓縮),小於紅色label,所有此時可以看到,當二者總寬度超出父view寬度時,綠色label優先被壓縮了

下面我們來調換2個label橫向壓縮優先順序如下:

紅label: Horizontal: 749
綠label:  Horizontal: 750
複製程式碼

再來看下效果:

紅色-749,綠色-750.png

此時,紅色label被壓縮了,紅色abel抗拉伸優先順序小於綠色label(越小越先被壓縮),此時AutoLayout壓縮紅色label內容

三.小結:

Content Compression Resistance 抗壓縮優先順序
優先順序越小,越先被壓縮,
此屬性在多個子檢視動態尺寸,並子檢視內容可能超出父檢視區域時,會起到重要作用,後面會結合例項來詳細介紹.


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

相關文章