iOS之UIScrollView的AutoLayout

关于UIScrollView的AutoLayout布局是去年学会的,因为项目中有用到,但今天为了研究UIScrollView的一个属性,写了一个UIScrollView的Demo,惊奇的发现我写的UIScrollView死活不能滚动,在谷歌查遍了所有的不能滚动原因,还是没有解决(这个下面也会说),最后才发现原来是约束的问题(storyboard并没有红色的错误或黄色的警告提示),所以这篇文章主要作为一个笔记吧,下次忘了也很快能想起来。


这个就不上效果图了,大概讲一下demo构成:一个UIViewController,里面一个UIScrollView,UIScrollView里面一个UIView(我们叫他BigV),在大V里面有4个SmallV,我们称为SmallV_1(红)、SmallV_2(黄)、SmallV_3(蓝)、SmallV_4(橙).

UIScorllView

对父视图(View):添加左、上、宽、高四个约束(不解释了)[1]

BigV

对父视图(UIScorllView):添加上、左、下、右四个约束(不解释了)

滑动的视图

思想:对父视图(BigV):添加上、左、下、右四条约束并对UIScrollView的父视图(View):添加宽和高的约束,下面具体说说四个SmallV的约束.
SmallV_1:对BigV添加上、左两个约束,对View添加宽、高两个约束
SmallV_2:对BigV添加右边的约束;对SmallV_1添加上、水平间隔、宽、高四个约束
SmallV_3:对BigV添加下边的约束;对SmallV_1添加左、垂直间隔、宽、高四个约束
SmallV_4:对SmallV_3添加上、水平间隔两个约束;对SmallV_1添加宽、高两个约束

从头到尾不用一句代码,还是很有效率的,demo点击下载,欢迎大家Star.

最后说下我在谷歌上查的UIScrollView不能滚动的原因吧:

  • 第一肯定是contentSize这个属性没有设置
  • 第二个是contentSize设置的地方不对,我查到的资料上说由于UIScrollView引近AutoLayout以后,如果使用AutoLayout,则要在viewDidAppear方法里设置contentSize
  • 第三个是说把userInteractionEnabled或scrollEnabled属性设为NO了
  • 第四个是说关于手势的传导问题,即重写touchesShouldCancelInContentView这个方法
  • 现在我加第五个,就是约束有问题v

版权声明:本文为 Crazy Steven 原创出品,欢迎转载,转载时请注明出处!


  1. 给个例子来理解UIScorllView对父视图添加约束:假设A对B添加约束,则first item为A,second item 为B,拖线操作有时候会颠倒first item和second item的位置,需要检查下调回来。 ↩

你可能感兴趣的:(iOS之UIScrollView的AutoLayout)