如何更新UICollectionViewCell中的Label?
UICollectionViewCell 内部Label无法更新排查方案
- 检查UI更新是否在主线程执行
所有UI相关操作必须在主线程触发,子线程修改UI会出现不更新、延迟更新甚至崩溃的问题,修改代码参考:
如果你使用OC,对应写法为:DispatchQueue.main.async { cell.customLabel.text = "你要更新的内容" }dispatch_async(dispatch_get_main_queue(), ^{ cell.customLabel.text = @"你要更新的内容"; }); - 检查数据源和复用逻辑是否正确
不要直接修改静态cell的label内容,必须先更新该indexPath对应的数据模型,再触发刷新,否则cell滚动复用时会恢复成旧内容:- 先修改数据源:
dataArray[indexPath.item].text = "新内容" - 局部刷新对应cell:
collectionView.reloadItems(at: [indexPath])
如果需要实时刷新当前可见cell,可通过以下方式获取对应cell后修改:
if let cell = collectionView.cellForItem(at: targetIndexPath) as? YourCustomCellClass { cell.customLabel.text = "新内容" } - 先修改数据源:
- 检查Label自身的配置问题
- 确认自定义cell的Label的IBOutlet已经正确和xib/Storyboard上的控件绑定,没有连错或者断连
- 确认没有其他代码覆盖Label内容,比如
layoutSubviews、collectionView(_:willDisplay:forItemAt:)等生命周期方法中是否有修改Label为旧值的逻辑 - 确认Label没有被其他自定义图层覆盖,或者
isHidden属性被设为true、alpha被设为0
- 检查刷新调用时机是否正确
不要在collectionView(_:cellForItemAt:)方法返回cell之后、cell渲染完成之前强行修改内容,所有内容修改逻辑要么放在数据源刷新步骤,要么放在cell的赋值方法内。
内容的提问来源于stack exchange,提问作者A5omic
相关产品推荐
相关产品推荐

