问题如题目所示。
场景:当前tableviewcell是由三个view拼接而成的,加在cell.contentView上。刷新的时候我只需要刷新其中一个cell的一个view里的内容。
但是执行刷新cell方法,是三个view是一起刷新的,导致数据不变的view会闪一下。
请问各位这种场景如何优化?
问题如题目所示。
场景:当前tableviewcell是由三个view拼接而成的,加在cell.contentView上。刷新的时候我只需要刷新其中一个cell的一个view里的内容。
但是执行刷新cell方法,是三个view是一起刷新的,导致数据不变的view会闪一下。
请问各位这种场景如何优化?
如果使用self.tableView reloadRowsAtIndexPaths: withRowAnimation:
刷新会闪,考虑是否是 布局改变了,检测下layoutSubviews
,或者重新创建了视图此视图的开销比较大,优化FPS及缓存cell高度
1.自定义 cell 写个方法 - (void)refreshUI;
在 cell 里实现这个方法
(void)refreshUI {
... 更新你 cell 上View的操作
}
当你想刷新 view 时调用- (void)refreshUI;
2 回答1.1k 阅读
1 回答1k 阅读✓ 已解决
1 回答2.7k 阅读
1 回答1.4k 阅读
1.7k 阅读
1 回答1.1k 阅读
1 回答939 阅读
首先很感谢大家的回答,今天看到还有人回复这个问题,我坐下补充
对这个问题,有一点需要更正:
1、出现刷新闪动问题的是CollectionViewCell,我当时以为tableView也会有同样的问题,所以问题里写成了tableViewCell。实时证明,我当时的场景tableView不会出现闪动问题。
解决方案:
1、针对原问题CollectionViewCell闪动,是由于CollectionView隐式动画引起的,可以这样写:
更多关掉隐式动画方案:http://adad184.com/2015/11/10...
2、针对tableViewCell的刷新,可以在自定义cell写一个方法实现,但是滑动到可见范围之外再回来,状态会回复(因为走了
tableView:tableViewcellForRowAtIndexPath
)。如果要保持cell的状态不改变只能通过reload方式实现,就是更新数据源。