相信不少同学使用Xib添加UIScrollView自动布局的时候,都会遇到明明约束都添加好了,还是报错。
恐怕大多数原因都是因为contentSize没有正确设置导致的这个问题。
因为需求要求加载HTML手机号码能点击拨打,于是我采用Label加载富文本,遇到一个问题,就是文本太长不能完全显示,还不能省略,于是我就想到把Label放在ScrollView上。
先看下效果:
记录一下步骤:
第一步
添加scrollview,并添加约束设置显示范围。此处我以superview约束scrollview大小。
此时会报错,没关系,我们继续
第二步
添加contentview。添加一个view到scrollview来作为container,设置上下左右距superview也就是说scrollview的上下左右为0。
第三步
设置contentsize.width。也就是说把container撑开的第一步,此处因为需求是垂直滚动,我设置contentview的width与scrollview的宽度相同,注意是frame而不是contentsize的宽度,所以需要根据scrollview的superview添加约束,或者设置固定值。
第四步
设置contentsize.height。主角上场了,添加label,并设置label与contentview上下左右边距,因为contentview有了固定宽度,label设置为自动换行,label就会根据字符串长度自适应高度了,这样就会吧contentview撑开,使contentview有了固定高度。scrollview也就有了contentsize的height和width了。
其实因为只有一个label,可以省略contentview,用label来代替,思路与上边相同,就是撑开scrollview。之所以添加contentview是因为开发过程中有可能在scrollview上添加多个空间,布局更为复杂,有了contentview,就可以很随意的添加控件,设置约束了。
总结:
一定要正确设置contentsize,也就是把scrollview的contentview"撑"开,无论是设置固定值,或者使用子view来给contentview一个固定的size。