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

-[UICollectionView _endItemAnimations] 中的 UICollectionView 断言失败

如何滚动另一个 UICollectionView 下方的 UICollectionView?

UICollectionView 单元内部已加载,但 UICollectionView 未显示

UICollectionView 断言失败 -[UICollectionView _updateWithItems:tentativelyForReordering:]