iOS 11 tableView切换数据源布局错乱

最近遇到个很奇怪的bug iOS 11中会出现tableView布局错乱

bug: 只在iOS 11中有 当某一页标签页很多数据 超过一屏时 向上滑动 然后点击另一个标签页 tableView 显示超出范围:


bug.gif

首先这个页面实现方式:
这种页面的实现方式是上面放俩个按钮 下面放一个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。

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容