VC对ScrollView的调整

来源:互联网 发布:乐视超级电视销售数据 编辑:程序博客网 时间:2024/06/17 06:55

automaticallyAdjustsScrollViewInsets

  • automaticallyAdjustsScrollViewInsets是ViewController的一个属性,指示VIewController是否需要自动调整ScrollViewInsets。
  • 默认值为YES,允许ViewController自动调整ScrollViewInsets

VC对ScrollView的调整

  • 当automaticallyAdjustsScrollViewInsets值为YES时,viewController根据当前view中statusBar,navigaionTionBar,toolBar或者toolBar来自动调整scrollView的的contentInset和ContentOffset。使得scrollView的内容不会被这些Bar遮挡
  • 具体通过_setNavigationControllerContentInsetAdjustment相关函数实现
    ./调整ScrollView.jpg

示例

  • 在一个由TabBarController导出的被Navigation封装的VC中拖一个tableview 铺满VC的View,不会被导航挡住64像素的高度。采用KVO观察
    ./屏幕快照 2016-06-24 上午2.20.11.png
    • contentInset的top增加了statusBar高度+NavigationBar高度。buttom增加了TabBar的高度
    • contentOffset也跟着调整了-64

隐藏NavigationBar时

./屏幕快照 2016-06-24 上午2.17.21.png
- contentInset的top增加了statusBar的高度。buttom增加了TabBar的高度
- contentOffset也跟着调整了-20

总结

  • 不管是否加在rootView上,子视图ScrollView都会被调整
  • 当ViewController的view hierachy中有ScrollView的时候,subView中index最小的scroView将会被调整。
  • 及时原先禁止了scrollView在某个方向的滚动,在view controller调整后,很有可能该方向还是能滚动

示例

view hierachy中有上下两个scrollview,他们都是view1的直接subview
1. 当先把底部的scrollView加入到view1的 subView中时,调整底部scrollView
./屏幕快照 2016-06-24 上午2.38.06.png
2. 当先把顶部的scrollView加入到view1的subView中时,调整顶部 scrollView
./屏幕快照 2016-06-24 上午2.38.38.png
3. 不管是何种情况,顶部的statusBar都没有被遮挡

VC调整影响scrollview的展示的解决方案

当view hierarchy中有多个scrollView,VC对contentInset的调整影响展示效果时有如下解决方案
1. 设置automaticallyAdjustsScrollViewInsets,禁止VC对contentInset调整
2. 将包含多个scrollView的hierarchy封装在一个scrollView中(姑且称之为containerScrollView)。那么containerScrollView将会被调整,从而保证hierarchy正常显示
相关测试demo

0 0
原创粉丝点击