最近遇到个很奇怪的bug iOS 11中会出现tableView布局错乱
bug: 只在iOS 11中有 当某一页标签页很多数据 超过一屏时 向上滑动 然后点击另一个标签页 tableView 显示超出范围:
首先这个页面实现方式:
这种页面的实现方式是上面放俩个按钮 下面放一个tableView 通过点击按钮切换tableView数据源来实现切换显示的效果
1.开始以为是iOS 11适配的原因 试了下面方法 不好使
// tableView 偏移20/64适配
if (@available(iOS 11.0, *)) {
self.tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;//UIScrollView也适用
}else {
self.automaticallyAdjustsScrollViewInsets = NO;
}
2.又尝试了修改布局觉得有可能safeArea影响的发现也不行
if (@available(iOS 11.0, *)) {
make.bottom.equalTo(self.view.mas_safeAreaLayoutGuideBottom);
} else {
// Fallback on earlier versions
make.bottom.equalTo(self.mas_bottomLayoutGuide);
}
3.还尝试了很多办法最后 发现创建tableView时添加以下代码bug消失
tableView.estimatedRowHeight = 0;
tableView.estimatedSectionHeaderHeight = 0;
tableView.estimatedSectionFooterHeight = 0;
写这个tableView并没有用估算高度的 而是用了返回高度的代理的
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return 60;
}
推测苹果在iOS 11系统里刷新数据源,更智能的估算了cell来布局 以适配safeArea。