UIScrollView 和 Auto Layout
iPhone 5 剛出來的時(shí)候,大部分不支持橫屏的 App 都不需要做太多的適配工作,因?yàn)槠聊粚挾葲]有變,table view多個(gè)cell也不需要加 code。但是在iPhone 6和iPhone 6 Plus發(fā)布以后,多分辨率適配終于不再是Android開發(fā)的專利了。于是,從 iOS 6 起就存在的 Auto Layout 終于有了用武之地。
在Auto Layout是一個(gè)很特殊的 view,對于 UIScrollView的 subview 來說,它的leading/trailing/top/bottom space是相對于UIScrollView的contentSize而不是bounds來確定的,所以當(dāng)你嘗試用 UIScrollView和它 subview 的leading/trailing/top/bottom來互相決定大小的時(shí)候,就會(huì)出現(xiàn)「Has ambiguous scrollable content width/height」的 warning。
正確的姿勢是用UIScrollView外部的view或UIScrollView本身的width/height確定subview的尺寸,進(jìn)而確定contentSize。因?yàn)?UIScrollView本身的leading/trailing/top/bottom變得不好用,所以我習(xí)慣的做法是在UIScrollView和它原來的subviews之間增加一個(gè)content view,這樣做的好處有:
- 不會(huì)在 storyboard里留下 error/warning為subview提供
leading/trailing/top/bottom,方便subview的布局 - 通過調(diào)整content view的size(可以是 constraint 的 IBOutlet)來調(diào)整 contentSize
- 不需要hard code與屏幕尺寸相關(guān)的代碼
- 更好地支持rotation
示例下載: