iOS UIScrollView通過(guò)AutoLayout實(shí)現(xiàn)自動(dòng)布局

一、前言

最開始使用UIScrollVIew都是用純代碼實(shí)現(xiàn)布局的,后來(lái)為了提高開發(fā)效率使用IBAutoLayout自動(dòng)布局,由于UIScrollView與一般視圖的自動(dòng)布局約束方式有些不同,如果不了解其中的原理或者不經(jīng)常使用AutoLayout實(shí)現(xiàn)自動(dòng)布局,突然要用AutoLayout來(lái)實(shí)現(xiàn)UIScrollView的布局,很可能就會(huì)感覺(jué)很困難,為了加深記憶和以后開發(fā)的便利特地寫了這篇文章。

二、具體步驟

  1. scrollView拖進(jìn)視圖控制器的View,并設(shè)置上下左右約束為0;
  2. 將一個(gè)View拖進(jìn)srollView作為所有subviews的父容器視圖contentView;
    scollView的自動(dòng)布局涉及到它內(nèi)部的frameLayoutGuidecontentLayoutGuide屬性
@available(iOS 11.0, *)
open var frameLayoutGuide: UILayoutGuide { get }

Use this layout guide when you want to create Auto Layout constraints related to the content area of a scroll view.
當(dāng)您想要?jiǎng)?chuàng)建明確涉及滾動(dòng)視圖本身的框架矩形而不是其內(nèi)容矩形的自動(dòng)布局約束時(shí),請(qǐng)使用此布局指南。

@available(iOS 11.0, *)
open var contentLayoutGuide: UILayoutGuide { get }

Use this layout guide when you want to create Auto Layout constraints that explicitly involve the frame rectangle of the scroll view itself, as opposed to its content rectangle.
當(dāng)您想要?jiǎng)?chuàng)建與滾動(dòng)視圖的內(nèi)容區(qū)域相關(guān)的自動(dòng)布局約束時(shí),請(qǐng)使用此布局指南。

frameLayoutGuide與contentLayoutGuide

從蘋果的官方文檔的說(shuō)明中,我們可以看出frameLayoutGuide主要是用來(lái)設(shè)置與scrollViewframe有關(guān)的約束,比如內(nèi)容區(qū)的寬或高是與frame的對(duì)應(yīng)值相等,x橫坐標(biāo)或者y縱坐標(biāo)與frame的對(duì)應(yīng)值相等的,而contentLayoutGuide主要是用來(lái)設(shè)置與滾動(dòng)的內(nèi)容區(qū)域有關(guān)的約束,例如:內(nèi)容區(qū)是縱向滾動(dòng)的,那么內(nèi)容區(qū)的topbottom是與contentLayoutGuide相等的,水平方向是與它中間對(duì)齊的。

  1. 設(shè)置contentViewscrollViewframeLayoutGuide的左、右兩個(gè)方向的約束為0;
    因?yàn)?code>contentView與scrollView等寬且橫軸方向位置固定為0。
設(shè)置與frameLayoutGuide的約束
  1. 設(shè)置contentViewscrollViewcontentLayoutGuide的上、下兩個(gè)方向的約束為0,水平方向中間對(duì)齊;
    因?yàn)?code>contenView即scrollView的內(nèi)容區(qū)且縱向滾動(dòng),所以縱軸方向與內(nèi)容區(qū)的相對(duì)位置固定,與內(nèi)容區(qū)水平方向?qū)R。
設(shè)置與contentLayoutGuide的約束
  1. 約束好內(nèi)容區(qū)即contentView的高度;
    上一步設(shè)置完約束還是會(huì)報(bào)錯(cuò),因?yàn)閮?nèi)容區(qū)即contenView的高度還未確定,如果內(nèi)容區(qū)的高度是固定的,可以設(shè)置contentView的高度約束為固定值;如果內(nèi)容區(qū)高度根據(jù)不同的內(nèi)容而變化,那就不需要設(shè)置contentView的高度約束,只要根據(jù)需要將控件添加到contentView,然后從上到下設(shè)置好各個(gè)控件縱向的約束。

三、結(jié)語(yǔ)

本篇文章介紹的只是UIScollView縱向滾動(dòng)自動(dòng)布局的實(shí)現(xiàn),但是我相信大家看完這篇文章后應(yīng)該可以舉一反三,自己實(shí)現(xiàn)UIScollView橫向滾動(dòng)自動(dòng)布局的設(shè)置。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容