iOS UITableView reloadData 视图漂移或者闪动解决方法

我们是工程师 ——加油 !

相同的代码,有的界面跳动,有的界面不跳动;
跳动、滑动、闪动、漂移,不知道怎么描述,就是这么个现象

点击关注调用reloadData.gif
  • 原因:

因为iOS 11后系统默认开启Self-Sizing;
Self-Sizing——官方文档是这样解释的:大概就是说我们不用再自己去计算cell的高度了,只要设置好这两个属性,约束好布局,系统会自动计算好cell的高度。

IOS11以后,Self-Sizing默认开启,包括Headers, footers。如果项目中没使用estimatedRowHeight属性,在IOS11下会有奇奇怪怪的现象,因为IOS11之前,estimatedRowHeight默认为0,Self-Sizing自动打开后,contentSize和contentOffset都可能发生改变。
所以可以通过以下方式禁用:

  • 解决方法:

在tableView初始化的地方加入下面代码

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

然后再reloadData视图漂移或者闪动就没有了

感谢评论区清蒸鱼跃龙门 的指导:
文章添加评论内容如下:

父类初始化的时候设置了estimatedRowHeight=44,
结果子类控制器页面上拉完reloaddata出现了文中说的cell跳动问题,
也就是不在原位置上了。此时我在子类设置estimatedRowHeight=0,
会导致布局错乱,全挤在一堆,
后来GitHub上找到说是:
estimatedRowHeight设置一个一定会大于你真实cell高度的值,就完美解决了。无论怎么上拉,新内容都只会在底部出现,内容区不再乱跳了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容