MJRefresh 上拉加载多次的Bug

与预估行高有关:
在estimatedRowHeight机制下,在reloadData的时候,会重新计算contentSize,所有cell显示完后才会确定contentSize的值,这样就有可能引起contentOffset的变化,从而再次触发底部的刷新,导致你明明动了一下手,却连刷了多次的行为。

分两种情况:

一、若你在创建tableView时指定了行高:
self.lazyTableView.rowHeight = 100;
那么你需要在下面加入这句代码(值与上方一样)
self.lazyTableView.estimatedRowHeight = 100;

二、若你在创建tableView时没有指定行高,行高是动态计算的,那么就有些麻烦了:
如果你在创建tableView时 指定了预估行高:self.lazyTableView.estimatedRowHeight = 100;那么会导致在上拉加载时会多次触发加载操作。
如果你在创建tableView时禁用了预估行高:self.lazyTableView.estimatedRowHeight = 0;那么有可能导致初次进入tableView时,最上方显示的并不是第一个cell,而是中间的cell。

(以上矛盾情况出现的场景是:一个tableView下有两种自定义的cell,每个自定义cell的高度都需要动态计算)
我的解决办法是:在创建tableView时 和下拉刷新方法中,指定预估行高:self.lazyTableView.estimatedRowHeight = 100;让初次进入tableView和下拉刷新时最上方显示第一个cell; 在上拉加载的方法中禁用预估行高self.lazyTableView.estimatedRowHeight = 0;以解决上拉加载多次触发的问题。

在解决上方的问题后,又发现了一个问题:在多次上拉加载后,回到顶部进行下拉刷新后,第一行cell被导航栏遮住了一部分,解决的办法是,在下拉刷新的方法中重置contentInset:self.lazyTableView.contentInset = UIEdgeInsetsZero;

水平有限,解决了这些问题略显繁琐,若有好方法望不吝告知。

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

相关阅读更多精彩内容

友情链接更多精彩内容