以前的作法
在以前要用 Auto Layout
來設置 UIScrollView
的 sub views 並不是一件讓人愉快的事情,雖然不複雜,但步驟就是有點麻煩。因為 scroll view 自身的特性,所以必須設定它本身的位置與尺寸,然後設定 sub views 的位置與尺寸,最後算出 contentSize
的尺寸。總結來說大概分成以下幾步:
- 設定
UIScrollView
本身的位置與尺寸
- 建立一個
contentView
並加到 UIScrollView
的 sub view
- 設定
contentView
的位置,通常是四邊都貼齊 UIScrollView
- 可以滾動的 sub views 都加到
contentView
,然後用 auto layout 設定這些 sub views 的位置與尺寸
- 如果設定無誤的話,
contentView
就可算出正確的尺寸,這就是 UIScrollView
的 contentSize
最讓人困惑且忽略的就是第三點,因為它很不自然,但在 UIScrollView
卻又是必須的。另外就是第四點,一定要有明確的位置跟尺寸,這樣才有辦法算出 contentSize
給 UIScrollView
使用。
現在的作法
從 iOS 11 開始,UIScrollView
多了 frameLayoutGuide
跟 contentLayoutGuide
這兩個方便的屬性,讓我們不必再用不自然的方式去設定 content 的 auto layout。
- 可以使用舊有的方式或是使用
frameLayoutGuide
設定 UIScrollView
本身的位置與尺寸
- 不需要額外的
contentView
了,直接把內容加到 sub view
- 這些 sub views 與
contentLayoutGuide
建立 auto layout constraints
整個設定流程變得自然許多,也更不容易出錯。現在我們只要確定 sub views 有設好明確的位置與尺寸,讓系統能夠算出 contentSize
即可。