UICollectionView ReloadData 未正确显示内容
Posted
技术标签:
【中文标题】UICollectionView ReloadData 未正确显示内容【英文标题】:UICollectionView ReloadData not showing content properly 【发布时间】:2020-03-22 13:11:01 【问题描述】:我正在尝试使用 SegmentControl 过滤我的 homeCollectionView。在录制片段时,我正在根据字典中可用的标签过滤内容。当我执行 ReloadData 并在段之间切换时,第一次(当我第一次在段上录音时),过滤器正在工作并且所有数据都来了,但是当我重新点击段时,部分单元格中的内容,尤其是 LabelViews 文本之后没有显示。此外,它发生在随机 indexPath 上。
这是我的代码:
@objc func toggleHomeContent(_ notification: NSNotification)
toggleValContType = notification.object as? String ?? "all"
if (toggleValContType == "all")
mainArrayData = primaryArrayData
else if (toggleValContType == "collections")
mainArrayData = primaryArrayData $0["filterType"] == "Col" || $0["filterType"] == "CTA"
else if (toggleValContType == "books")
mainArrayData = primaryArrayData $0["filterType"] == "Book" || $0["filterType"] == "CTA"
homeCollectionView?.reloadData()
homeCollectionView?.layoutIfNeeded()
homeCollectionView?.collectionViewLayout.invalidateLayout()
//DispatchQueue.main.async(execute: homeCollectionView.reloadData)
而数组是这样声明的:
var mainArrayData : [[String:String]] = HomeArray().mainArray
var primaryArrayData: [[String:String]] = HomeArray().mainArray
这是问题的快照:
Snapshot of the issue
提前致谢!
【问题讨论】:
【参考方案1】:在主线程中添加这段代码:
homeCollectionView?.reloadData()
homeCollectionView?.layoutIfNeeded()
DispatchQueue.main.async
homeCollectionView?.reloadData()
homeCollectionView?.layoutIfNeeded()
【讨论】:
感谢您的回复,但解决方案不是解决问题。它仍在使用空白的 LableViews 重新加载。 请查看我在问题中添加的快照。 使用i.stack.imgur.com/ezjY4.png 3D 视图层次检查内置工具检查 uiview 是否违反约束。 如果一切正常,只有标签文本丢失,然后再次重新检查 cellForRowForItem 代码。 非常感谢您提供的信息。这确实有效,我能够理解由于高度限制而没有生成标签。感谢您的解决方案。以上是关于UICollectionView ReloadData 未正确显示内容的主要内容,如果未能解决你的问题,请参考以下文章
带有 TableView 和 CollectionView 的 UiView 不会随机刷新
-[UICollectionView _endItemAnimations] 中的 UICollectionView 断言失败
如何滚动另一个 UICollectionView 下方的 UICollectionView?
UICollectionView 单元内部已加载,但 UICollectionView 未显示
UICollectionView 断言失败 -[UICollectionView _updateWithItems:tentativelyForReordering:]