tableview的一个适配问题

IOS11以后,创建的scrollView机器子View会被系统自动适配,导致tableview向下偏移

self.tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;

1、IOS11新增属性

scrollView在iOS11新增的两个属性:adjustContentInset 和 contentInsetAdjustmentBehavior。

adjustContentInset表示contentView.frame.origin偏移了scrollview.frame.origin多少;是系统计算得来的,计算方式由contentInsetAdjustmentBehavior决定。有以下几种计算方式:

1. UIScrollViewContentInsetAdjustmentAutomatic:
    //如果scrollview在一个automaticallyAdjustsScrollViewInsets = YES 的controller上,并且这个Controller包含在一个navigation controller中,这种情况下会设置在top & bottom上 adjustedContentInset = safeAreaInset + contentInset不管是否滚动。其他情况下与UIScrollViewContentInsetAdjustmentScrollableAxes相同
    
2. UIScrollViewContentInsetAdjustmentScrollableAxes: 
    //在可滚动方向上adjustedContentInset = safeAreaInset + contentInset,在不可滚动方向上adjustedContentInset = contentInset;依赖于scrollEnabled和alwaysBounceHorizontal / vertical = YES,scrollEnabled默认为yes,所以大多数情况下,计算方式还是adjustedContentInset = safeAreaInset + contentInset

3. UIScrollViewContentInsetAdjustmentNever: adjustedContentInset = contentInset
    
4. UIScrollViewContentInsetAdjustmentAlways: adjustedContentInset = safeAreaInset + contentInset

当contentInsetAdjustmentBehavior设置为UIScrollViewContentInsetAdjustmentNever的时候,adjustContentInset值不受SafeAreaInset值的影响

 

2、iOS 11的tableView顶部留白

    iOS 11上发生tableView顶部有留白,原因是代码中只实现了heightForHeaderInSection方法,而没有实现viewForHeaderInSection方法。那样写是不规范的,只实现高度,而没有实现view,但代码这样写在iOS 11之前是没有问题的,iOS 11之后应该是由于开启了估算行高机制引起了bug。添加上viewForHeaderInSection方法后,问题就解决了。或者添加以下代码关闭估算行高,问题也得到解决。

self.tableView.estimatedRowHeight = 0; 
​
self.tableView.estimatedSectionHeaderHeight = 0; 
​
self.tableView.estimatedSectionFooterHeight = 0; 

猜你喜欢

转载自blog.csdn.net/weixin_39624536/article/details/83713682