iOS開發之UIScrollView在Autolayout下的使用

YungFan發表於2017-12-13

一、使用的基本原則:

原則1:UIScrollView的size依賴於subviews

首先在StoryBoard中拖入一個UIScrollView,用Pin按鈕,隨意設定其佈局。因為設定UIScrollView的佈局約束是沒有用的,UIScrollView的size(即contentSize)是根據其中的subviews所佔據的size來計算的。當然,如果contentSize的內容不足以佈滿整個UIScrollView時,滾動條將不會出現,UIScrollView也不會滾動。

原則2:subviews的size不能依賴於UIScrollView

因為UIScrollView的size依賴於subviews,而如果subviews的size再依賴於UIScrollView,就類似於作業系統中的死鎖了,佈局引擎就混亂了,無法工作。

二、正確的姿勢

1、在StoryBoard中拖入一個UIScrollView。

2、設定UIScrollView的約束。例如Pin上、下、左、右邊距都為0,此時UIScrollView將佔據整個ViewController’s  view的介面。

3、拖入一個UIView作為ScrollView的子控制元件,這個控制元件就是作為容納真正佈局中控制元件的父控制元件,比如命名為contentView。約束contentView的寬和高,使其能滿足佈局需要,能夠擺放下所有你想擺放的控制元件(一般來說都會超過螢幕的大小)。例如:width 等於ViewController’s  view 的width,height等於1000。

4、設定 contentView 的Pin約束,上下左右都為0。Why?明明設定了寬和高了呀,如果不做這一步,UIScrollView還是不能滾動,因為這4個Pin約束實際上是用於告訴UIScrollView:我會把你的內容“撐到”多大。即contentSize必須根據contentView的4條邊來確定,而不是根據別的方式。這樣,UIScrollView就把contentSize的4條邊和contentView的4條邊關聯起來了。如果contentView的4條邊發生變化,UIScrollView會自動調整contentSize。

5、接下來就是在contentView上佈局專案中需要的介面了。例如在UIView左上角放了一個Label(約束:top、leading),右下角放了一個Label(約束:bottom、trailing)。注意,這些約束都只是和contentView相關,沒有和UIScrollView相關。

相關文章