UIScrollView自动向下偏移原理

iOS11前:automaticallyAdjustsScrollViewInsets

iOS11:contentInsetAdjustmentBehavior

        我们知道,当我们放入一个UISCrollView到view上的时候,可以根据上述的两个属性来实现scrollView内容的布局调整,以避免被遮挡。默认会帮你实现,你也可以选择关闭,然后自己布局。那么到底是怎么实现偏移的呢???

看下视图控制器的根view:

根view的frame和bounds

我们的table加在根view上,并且frame等于根view的frame:

CGRect tableRect = self.view.frame;

_listTable = [[UITableView alloc]initWithFrame:tableRect     style:UITableViewStyleGrouped];

table的frame和bounds

我们看到tableView的frame和bounds的y值是不一样:

frame :{0,0,375,812}

bounds :{0,-88,375,812}

这个看起来就比较诡异了。因为我们知道bounds的是相对于自身坐标系的永远是(0,0),但是这里的bounds是(0,-88),而frame是{0,0}。我们知道在iOS11中因为安全区的存在,table进行了88pt的向下偏移(没有大标题),但是我们看界面上,table并没有往下移动啊,那么其实就是反过来处理了,我们将table的原点变成了(0,-88),因为我们是改变了坐标点,并没有偏移,所以table在view中的位置没有变,所以frame还是{0,0},而bounds则变成了{0,-88}。

这样我们在table中放置元素的时候,比如加入一个子视图subView,设置frame为{0,0,200,100},可想而知,因为原点其实是{0,-88},那么{0,0}的位置其实是在table原点往下88pt的地方,这样就做到了内容的向下偏移了。

所以:

我们所说的table因为安全区向下偏移了一定的距离,是通过更改table的原点,来达到内容偏移的目的。

而且我们看到navigationBar其实与table是共享背景的。也是红色。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转载:http://www.cocoachina.com/swift/20161201/18198.html 前言...
    F麦子阅读 9,822评论 2 8
  • 1.iOS中的round、ceil、floor函数略解 round如果参数是小数,则求本身的四舍五入.ceil如果...
    K_Gopher阅读 4,903评论 1 0
  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌。在这里你可以看...
    F麦子阅读 10,519评论 5 13
  • 这次学校里被抽到有两门科目统考,老师们很用心,明显感觉到维的压力增大了,这几天作业量一下子就加大了。每天放学迟,回...
    daweily阅读 1,943评论 0 0
  • 文丨赵自力 你知道生活中有哪些东西是不能自拔的吗? 我总结过,最令人不能自拔的,除了爱情,还有牙齿。 01 我小时...
    夏花有约阅读 4,638评论 25 53