IOS TableView设置estimatedRowHeight。估计行高的快速滑动导致画面“跳跃”。
下面这段话来自这位朋友的博客。
因为tableView需要跳转到顶部位置,所以tableView的contentOffset设置为(0,0)。这个时候我突然发现,刚加载数据的时候,可以正常回顶了。分页后,tableView的内容第一次没有回到顶部,而是不定地回到了中上位置,不过我第二次可以成功回到顶部。
解决方案:
完美溶液
原因:
当tableView中的单元格数量发生变化并再次重载时,contentOffset的值是通过估计每个单元格的高度以及页眉和页脚的高度来计算的,这不是一个准确的值。知道原理后,解决方法就简单了,把系统自己的估计关掉就行了。
EstimatedRowHeight是一个估计身高,在iOS11之前为0。在iOS11下,该值默认为44(但目前在ios14下登录显示为-1)。
先说具体细节。
如果实现了func table view(_ table view:uitableview,indexpath: indexpath处的行的估计高度->;估计高度的代理CGFloat和estimatedRowHeight,默认高度将无效。ios10之前EstimatedRowHeight默认为0。我觉得别人说ios11后默认为44,但是我登录发现默认为-1。通过实际测试,发现实际计算中并没有用到-1或44的值,大约是17。但是,如果您想防止边界跳跃,您最好实现估算高度的代理,并返回尽可能接近真实高度的值。
我博客的原始地址