内容字号:默认大号超大号

段落设置:段首缩进取消段首缩进

字体设置:切换到微软雅黑切换到宋体

MJRrefresh关于mj_reloadData死循环崩溃分析

2018-09-11 21:34 出处:清屏网 人气: 评论(0

问题描述及分析

废话不多说.直接上传截图了.在iOS11.0之前,MJRrefresh直接崩溃在mj_reloadData的死循环中.

那么问题出现在什么位置呢?其实就是 UITableView的 estimatedRowHeight 属性和 - (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath 方法,我们知道这两个方法是估算高度的功能.假设你对其进行了设置,而且值过小的时候,MJRefresh的KVO会监听错误的contentoffset,造成不停进行上拉加载操作.最终就造成了崩溃.

解决方案

网上现在提供了两种方案.分别是注释源码和修改estimatedRowHeight的值.

  • 注释MJRefresh中两个方法.在 UIScrollView+MJRefresh.m 文件中的UITableView和UICollectionView的load方法.

但是这种方案会导致automaticllyHidden = YES失效.当然了.在最新的版本中,MJRrefresh的作者已经提到要弃用 automaticllyHidden 这个属性了.所以仍然还在使用这个属性的童鞋需要注意.

  • 把estimatedRowHeight的值或者 - (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath 方法的返回值设置为和你的Cell高度相似即可.

estimatedRowHeight 设置分析 (方案优化)

难道,解决mj_reloadData死循环崩溃到这里就结束了吗?不不不,我们要分析下我们的当初是什么情况下设置 estimatedRowHeight 属性或是 - (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath 这个代理方法的.设置 estimatedRowHeight 属性是当我们上拉加载的时候发现当前的tableView出现抖动,原因就在于并没有设置 estimatedRowHeight 属性这个属性造成了.

那么,是不是我们解决了tableView列表跳动问题.我们就可以不使用 estimatedRowHeight 属性呢?是的,经过一番查证之后,发现网上有这种解决方案.即可全局解决抖动问题.

if (@available(iOS 11, *)) {
        [UIScrollView appearance].contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; //iOS11 解决SafeArea的问题,同时能解决pop时上级页面scrollView抖动的问题
    }else{
        [UITableView appearance].estimatedRowHeight = 0;
        [UITableView appearance].estimatedSectionHeaderHeight = 0;
        [UITableView appearance].estimatedSectionFooterHeight = 0;
    }

这样,我们就可以不设置 estimatedRowHeight 属性了.然后mj_reloadData死循环崩溃也就迎刃而解了.删除 estimatedRowHeight 属性或者或者 - (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath 代理方法即可.

结语

出现问题 → 分析问题 → 解决问题 → 优化解决方案 . 到这里就结束了.有任何问题欢迎评论区留言,一起探讨.谢谢.欢迎关注骚栋.

崩溃源码Demo传送门

 
分享给小伙伴们:
本文标签: MJRrefreshmj_reloadDat

相关文章

发表评论愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。

CopyRight © 2015-2016 QingPingShan.com , All Rights Reserved.

清屏网 版权所有 豫ICP备15026204号