需求
iOS编程中经常会遇到在IB中编写较长的页面。这种较长的页面在不同的设备上显示的时候就会要求:在屏幕正常的设备上(如iPhone6)正常显示,而在屏幕小一点的设备上面(如iPhone5)显示成滚动页面。这种实现就是基于UIScrollView。如果是代码编写的UIScrollView,那么实现很容易,就是比较麻烦。IB会比较简洁。这里就说一下如何使用IB来实现ScrollView自适应内容大小实现滚动。
- 在UIViewController中添加UIScrollView。设置到Safe Area的constraints都是0。
- 在UIScrollView中添加UIView(作为Content View),并且设置到parent view 的constraints都是0。
- 设置content view 的宽度和parent view 一样,以保证水平不会滚动。这个时候可以先设置一下高度也和parent view一样,不然会有warning出现,但等到后面content view 的内容确定之后,这个设置不要也可以的。
- 在content view 中添加一些label,设置label的上下间距约束。这些约束会帮助IB计算content view 的实际高度,而这个实际高度就是scrollview 的contentSize。只有scroll view知道了自己的content size,它才能滚动。
- 注意!在content view 设置完了之后,需要去更改之前设置的一个约束(content view 和 scroll view 等高的约束)。因为这些高度约束的优先级都是1000。这在实际显示的时候会优先以parent view的约束为主,这就导致IB会强制要求content view 和 scroll view 等高(即使content view 的高度已经知道了)。所以这个时候我们就需要降低 等高 这个约束的优先级(250)。这样在content view 高度知道的情况下,IB就会优先使用content view 的高度为主。其实说了这么多,直接把 等高的约束删了就可以了。
网友评论