美文网首页iOS开发iOSiOS进阶指南
UIScrollView使用autolayout小结

UIScrollView使用autolayout小结

作者: starfox寒流 | 来源:发表于2015-09-12 18:25 被阅读4260次

    很久没有autolayout做scrollView的布局了,都快忘了。让UIScrollView实现autolayout比较麻烦。。记录下来以便后期查看。。

    参考一部分网上的内容。这是一个最简洁的方法。
    1、创建一个空白的UIViewController

    2、将UIScrollView添加到UIView控件中,并设置UIScrollView针对父视图UIView的constraints(Leading/trailling/top/bottom = 0)

    3、最主要的来了,添加UIView控件到UIScrollView中。。
    (1)并改名为ContentView....(UIScrollView主要是靠子视图来实现autolayout的高度和宽度的计算)
    (2)然后设置ContentView的针对父视图UIScrollView的 constraints
    1、Leading/trailling/top= 0
    2、bottom = 1
    3、equal height / equal width (ContentView的高度和宽度 与 UIScrollView相等)
    4、设置equal height的优先级 priority 小于 刚才设置的bottom的优先级(该bottom的是ContentView针对UIScrollView的constraints),这里设置priority=999.
    这里需要注意
    第一:为什么 bottom =1 而不是 bottom = 0。
    在实际开发中,如果为0,并且ContentView中的内容高度不超过屏幕的高度时,uiscrollview不能下上拉动。
    第二:要实现ContentView 的高度自适应为uiscrollview的contentSize的高度,需要ContentView中的子视图有明确的top与bottom,用来让autolayout计算出ContentView的实际高度.
    第三:为什么要设置equal height 的优先级。。。我们来写个公式更容易理解
    因为
    scrollview.height = uiview.height
    又因为
    ContentView.height = scrollview.height + 1
    所以
    ContentView.height != scrollView.height 也就是不能实现equal height 这个constraints。。会报错。
    只要调整一下优先级就可以解决这个问题,出现冲突,优先适应ContentView的高度....

    现在你可以在ContentView上添加你想添加的控件,但记住如果你要添加的控件已经超出了屏幕的高度,你需要给ContentView里面的子控件加上bottom 和 top(不超过你也可以添加),这样autolayout才能计算出ContentView的高度,并将这个高度赋给UIScrollView的ContentSize,实现自适应高度。还需要注意一点就是如果最下面的控件已经超出界面外了,那么在添加bottom to ContentView的这个约束时,XCode默认是-xxx的,这个时候如果在模拟器上运行的话,可以看到还是滑动不到最下面去。所以要把这个约束值改为0或者大于0.

    如果代码中设置了self.automaticallyAdjustsScrollViewInsets = NO;,那么则需要把ContentView中的最下面的控件的bottom to ContentView 约束+44.导航栏的高度。

    ContentView中如果使用UILabel,要给uilabel明确的height constraint,这样auto layout才能计算出高度。

    相关文章

      网友评论

      本文标题:UIScrollView使用autolayout小结

      本文链接:https://www.haomeiwen.com/subject/uowpcttx.html