iOS AutoLayout進階(三)Content Compression Resistance Priority

前言

本文將給你們介紹AutoLayout的Content Compression Resistance,說通俗一點就是"視圖的抗壓縮優先級".git

一. 本篇重點介紹:Content Compression Resistance Priority

許多開發者可能對這個屬性比較陌生,一樣這個屬性對有intrinsic content size的控件(例如button,label)很是重要. 注:具備intrinsic content size的控件當你設置內容後,它能夠根據內容多少來調整本身大小github

1. Content Compression Resistance Priority:

視圖抗壓縮優先級, 值越小,視圖越容易被壓縮spa

2. 使用場景:

當一個視圖上有多個intrinsic content size的子視圖動態尺寸,而且子視圖可能超出父視圖區域時,此屬性可控制哪些視圖被內容被優先壓縮.使其不超出父視圖區域.3d

3. Content Compression Resistance Priority在約束界面以下位置:

Content Compression Resistance.png

二. 代碼示例:

1.新建工程,咱們添加一個固定大小的視圖view(此view已添加約束,大小固定),在這個view上放2個label,分別爲紅綠,分別對其添加以下約束:code

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

均不給寬度約束,寬度由label文字多少本身決定, 此時你會發現,添加完以上約束後,會報下面錯誤: cdn

demo.png

這個錯誤的意思是說:blog

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

添加完成後錯誤消失,效果以下: get

紅色-750,綠色-749.png

由於綠色label抗壓縮優先級爲749,(優先級越小越容易被壓縮),小於紅色label,全部此時能夠看到,當兩者總寬度超出父view寬度時,綠色label優先被壓縮了it

下面咱們來調換2個label橫向壓縮優先級以下:

紅label: Horizontal: 749
綠label:  Horizontal: 750
複製代碼

再來看下效果:

紅色-749,綠色-750.png

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

三.小結:

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


代碼地址:github.com/CoderZhuXH/…

相關文章
相關標籤/搜索