iOS随心记_夏点iOS Developer

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

2018-01-02  本文已影响737人  夏点

最近遇到个很奇怪的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。

上一篇 下一篇

猜你喜欢

热点阅读