iOS UITableView reloadData 视图漂移或

作者: 曾经像素有点低 | 来源:发表于2018-02-27 14:56 被阅读25333次
    我们是工程师 ——加油 !

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

    点击关注调用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视图漂移或者闪动就没有了

    相关文章

      网友评论

      • 动感超人丶:self.tableView.rowHeight = UITableViewAutomaticDimension;
        这个怎么办?
        曾经像素有点低:@哎起个什么逗比的昵称呢 我测试了一下,如果用xib约束后使用 UITableViewAutomaticDimension。那么estimatedRowHeight一定要有值的。因为一定要打开Self-Sizing;但是self.tableView.estimatedRowHeight = 0;是为了关闭Self-Sizing;本身这就是矛盾的。所以设置estimatedRowHeight = 0.1;是不能解决这个问题的。我之前的项目纯代码编程。所以没有考虑到UITableViewAutomaticDimension;这个问题暂时没有好的解决办法。如果大家有什么好的解决方法,欢迎大家指教。我一定虚心学习,认真补正文章
        芒果儿1:@曾经像素有点低 同样的问题,我也想到了0.1 ,正在尝试,编译中,期待结果...
        曾经像素有点低:你好,你是指self.tableView.rowHeight = UITableViewAutomaticDimension;必须在estimatedRowHeight有值的情况下使用对吗?这个UITableViewAutomaticDimension我了解的不多,试试能不能用estimatedRowHeight = 0.1;或者你有什么好的解决方式欢迎指教

      本文标题:iOS UITableView reloadData 视图漂移或

      本文链接:https://www.haomeiwen.com/subject/mlfmxftx.html