iOS8 TableView 遇到的坑

问题:iOS8下,界面A使用了grouped类型的UITableView,发现点击cell跳转到别到界面,再返回界面A的时候,tableView的滚动位置发生了改变,即tableView.contentOffset.y发生了改变。

思考:tableView.contentOffset发生变化,查找发现自己没有手动设置tableView的contentOffset属性。那么一定是调用了scrollViewDidScroll代理方法,在scrollViewDidScroll下断点,发现点击cell的跳转的时候和返回的时候都调用了这个滚动的代理方法。一般tableView scrollViewDidScroll的调用是reloadData触发,在A界面断点[tableView reloadData],发现没有调用。

解答:debug了很多次,排除其他原因之后,仔细看代码发现使用了预估高度和自动计算高度的代码

tableView.estimatedRowHeight = 110;

tableView.rowHeight = UITableViewAutomaticDimension;

屏蔽这两句代码之后,果然成功解决。猜测是iOS8 使用预估高度和自动计算高度,每次tableView展示会自动去调用reloadData,所以改变了tableView.contentOffset。

总结:iOS9及之上没有这个bug。预估高度和自动计算高度在iOS8下慎重使用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容