iOS 10系统tableView加载自定义cell,上下滑动过程中cell消失和cell会重复添加问题

直接进入主题:

  问题现象:一个tabview各种联动复杂交互的页面突然被测试提一个bug过来,问题现象1、说在iOS10系统下此页面提示文字在点击展开按钮后,展开按钮在提示文字中间,cell高度刷新了,但是按钮位置仍然没变化;问题现象2、在加载出来页面之后,上下滑动,有些cell在还未离开可视区域就消失了。。。

问题一:断点跟逻辑,发现cell确实刷新了高度,并且逻辑并无异常。然后打开分层视图,发现在此indexPath位置存在两个cell,按正常逻辑来说这是不可能的,一个位置怎么可能加载出来了两个cell,所以分析是不是cell重用机制出问题了。每一次刷新cell缓存池中拿到的cell地址不同,然后上一次加载的cell没释放引起。然后测试不使用重用机制和注册cell标识符唯一

//不使用重用机制

UITableViewCell *cell = [tableView cellForRowAtIndexPath:@"cell"];     if (!cell) {         cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];     }     cell.selectionStyle = UITableViewCellSelectionStyleNone;     cell.backgroundColor = [UIColor clearColor];     return cell;

仍然不行,分层结构显示仍是重复加载多个,没办法一步一步的跟逻辑吧

最终在消失前瞬间,断点中发现有一个部分cell刷新的操作。然后果断先屏蔽刷新操作,再测试,问题现象消失。

然后就开始分析为什么部分cell刷新后,再对已经加载的cell做刷新会出现加载多个问题?

最终经过打印cell的相关日志,发现如果局部刷新后,tableview对原有存在未刷新的cell引用没了,也就是通过cellForRowAtIndexPath方法,拿不到已经加载过的cell了,所以后续再对加载过的cell做操作,就会重新加载新的cell了,这就出现了在分层页面上看到加载多个cell的问题,其实实际引用的还是只有一个。

注释掉局部刷新后,问题二现象也没了,具体原因仍需分析,为何局部刷新后

 NSIndexPath *indexPath = [NSIndexPath indexPathForRow:_remitAcctIndexPath.row inSection:_remitAcctIndexPath.section];

               [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];

tableview失去引用。

欢迎定位原因的来补充修改,以上分析只是个人观点,如有不对欢迎指正。

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

友情链接更多精彩内容