加载动画

iOS TableView设置预估行高estimatedRowH

2021-08-16  本文已影响0人  再好一点点

下面这一段来源于这位朋友的博客

由于需要让tableView跳转到最顶端的位置,所以设置了tableView的contentOffset为(0,0)。这时候突然发现当我首次加载的数据时 是可以正常回到顶部的,分页之后 第一次设置时 tableView的内容并没有回到顶部 ,而是可变性的回到了中间靠上的位置 但在第二次的时候就可以成功回到顶部了。

解决办法:

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

完美解决

原因:

当tableView的Cell数量改变后再次reload,contentOffset的值是通过预估各cell的高度及header、footer的高度后计算得到的,并非准确的值。知道原理后,解决办法也就简单了,关闭系统自带的预估就好了

estimatedRowHeight是一个预估高度,iOS11之前是为0,在iOS11下,这个值默认为44(但是目前ios14下边打log显示为-1)

接下来说一下具体细节问题

image image image

接下来是我这边的总结

如果实现了func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat这些预估高度的代理,estimatedRowHeight 这些默认高度就会失效。estimatedRowHeight在ios10之前默认为0,我看其他人说ios11以后默认为44,但是我打log发现默认为-1。通过实际测试发现在真正参与计算的时候不是使用-1,也不是44,大概是17左右的数值进行预估的。不过如果想保持界不出现跳跃的话,最好实现预估高度的代理,并且尽可能返回接近真实高度的数值。

本人博客原文地址

上一篇 下一篇

猜你喜欢

热点阅读