IOS11 UITableView 显示问题小结

问题一:
1)iOS11 中 UITableView setContentOffset 方法结果不准确,
会导致 footer 添加不上,在IOS11以下的系统是可以的。

2)IOS11 中自定义区头会和自定义的cell 重用,导致页面显示混乱。

解决:
原因分析:
以上问题都是因为IOS11中引入自动估算行高的机制Self-Sizing引起的,并且IOS11默认是开启的。
因为动画是观察这两个属性的变化进行的,如果代码中有用到就会造成动画的异常,因为在估算行高机制下,contentSize的值是一点点地变化更新的,所有cell显示完后才是最终的contentSize值。因为不会缓存正确的行高,tableView reloadData的时候,会重新计算contentSize,就有可能会引起contentOffset的变化。

解决:可以通过以下代码关闭Self-Sizing 就可以解决以上问题。

if (@available(iOS 11.0, *)) {//关闭Self-Sizing
        self.contentTable.estimatedRowHeight = 0;
        self.contentTable.estimatedSectionFooterHeight = 0;
        self.contentTable.estimatedSectionHeaderHeight = 0;
    }

问题二:
iOS11 中 给 tableview添加区头和区尾 只实现 :

  - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section ;
 - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section;

无论height 设置多大 ,添加的footer 都无法显示。

解决:
必须实现以下这个代理
不实现 
  -(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
return [[UIView alloc]init];
 }



最后给大家推荐个不错的公众号 "说神码",或者大家可以扫描下面的二维码关注

![qrcode_for_gh_3b0177133bdb_258.jpg](https://upload-images.jianshu.io/upload_images/2370324-3aaf83dd69470513.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

你可能感兴趣的:(IOS11 UITableView 显示问题小结)