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是共享背景的。也是红色。
网友评论