iOS 11 UITableView加载时乱跳问题

正常reload-1.gif

异常reload-1.gif

正常reload-2.gif

异常reload-2.gif

异常:

经过测试,异常只出现在iOS 11+的设备上,查了一些资料发现是 Self-Sizing 在 iOS 11 下默认开启导致的.

异常原因:

执行 reload操作时 会导致contentsize的重新计算

异常解析:

在 Self-Sizing 开启的状态下,cell的行高是通过estimateRowHeight来计算的,contentsize也是不定的(只有cell显示完的时候,contentsize才最终确定下来)
当此时执行 reloadData操作时,会调用 heightForRow 进行布局,这就造成了contentSize的变化, 也就是tableview显示区域的变化,进而出现了乱跳的现象

解决方案:

关闭估算行高

tableView.estimatedRowHeight = 0;

当使用到SectionHeader或者SectionFooter的时候

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

推荐阅读更多精彩内容

  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,766评论 8 265
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,170评论 1 32
  • 也许历代文人骚客赋予了大西北太多的意象,使我对这片土地充满向往。无论是依依惜别的《送元二使安西》,还是神思飞越...
    小妖哥儿阅读 963评论 4 4
  • 11/33【33天写作】 时间:2018年2月9日 主题:创业,你准备好了吗? 当国家提出“大众创业,万众创新”的...
    南瓜他爸1983阅读 139评论 0 0
  • 软件:手机淘宝 搜索关键词:桌布布艺 / 桌布布艺 棉麻(两个选一) 卡位: 折扣和服务:包邮 发货地筛选:苏州 ...
    Plong阅读 266评论 0 0