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)
接下来说一下具体细节问题



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