问题描述:
在UITableView
调用reloadData
时候可能会出现cell
布局消失的问题
一般的纯显示页面没有出现这样的问题,这个问题是出现在如下情形:
1、有多种cell
样式且都继承自一个自定义的父cell
2、需要对cell
进行编辑修改,修改之后为了让修改显示出来,所以调用了reloadData
方法出现了有部分cell
布局消失,查看了页面的图层发现cell
变成了自定义的父cell
样式,由于父cell
没有做布局,所以看似是cell
的布局消失了
3、断点调试了代理方法,对于cell
的复用Identifier
没有任何问题
这些看似是没有什么问题的,那么问题是出在哪里了呢?
问题分析:
现在来分析一下出现上述的问题:
由于出现了父cell
样式,所以在代理方法里边应该是返回的父cell
,正常来说通过cell
的复用Identifier
来获取cell
是没有什么问题的,但是这里的问题可能就出在UITableView
调用reloadData
方法,这个方法是刷新所有样式,也称之为暴力刷新。说实话,一般情况,这个操作也都不会出现什么问题,但是这里可以从这方面下手来尝试解决。
解决方案:
分析了问题之后,大概确定了问题的所在位置,那么要解决就很容易了。
既然调用UITableView
的reloadData
刷新全部会出现该问题,那么换个方法刷新局部是不是就可以解决这个问题呢?我们来尝试一下。
替换UITableView
的reloadData
方法来刷新修改之后的单个cell
如下:
[self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
经过验证,该方法有效,可以解决以上问题。
很多时候,遇到问题可能会着急不知道该怎么办,
这时候静下心来好好想一想,多尝试,说不定解决方案就出来了。
最后,希望可以帮助到有需要的码友们。