UIScrollView 和 Auto Layout
iPhone 5 刚出来的时候,大部分不支持横屏的 App 都不需要做太多的适配工作,因为屏幕宽度没有变,table view多个cell也不需要加 code。但是在iPhone 6和iPhone 6 Plus发布以后,多分辨率适配终于不再是Android开发的专利了。于是,从 iOS 6 起就存在的 Auto Layout 终于有了用武之地。
在Auto Layout是一个很特殊的 view,对于 UIScrollView的 subview 来说,它的leading/trailing/top/bottom space是相对于UIScrollView的contentSize而不是bounds来确定的,所以当你尝试用 UIScrollView和它 subview 的leading/trailing/top/bottom来互相决定大小的时候,就会出现「Has ambiguous scrollable content width/height」的 warning。
正确的姿势是用UIScrollView外部的view或UIScrollView本身的width/height确定subview的尺寸,进而确定contentSize。因为 UIScrollView本身的leading/trailing/top/bottom变得不好用,所以我习惯的做法是在UIScrollView和它原来的subviews之间增加一个content view,这样做的好处有:
- 不会在 storyboard里留下 error/warning为subview提供
leading/trailing/top/bottom
,方便subview的布局 - 通过调整content view的size(可以是 constraint 的 IBOutlet)来调整 contentSize
- 不需要hard code与屏幕尺寸相关的代码
- 更好地支持rotation
示例下载: