【问题标题】:UICollectionView Custom layout reloading issue in SwiftSwift 中的 UICollectionView 自定义布局重新加载问题
【发布时间】:2016-08-03 13:11:09
【问题描述】:

这是参考链接:

https://www.raywenderlich.com/107439/uicollectionview-custom-layout-tutorial-pinterest

我在UICollectionView最后一个单元格中实现了加载更多,数据正在下载,下载完成后我想重新加载集合

collectionView.collectionViewLayout.invalidateLayout()
self.collectionView.reloadData()

let concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
dispatch_async(concurrentQueue) {
            DataManager.sharedInstance.homeRequest(Dictionary: params, onSuccess: { (dict) in
                self.downloadPageIndex +=  1
                let response = HomeObject(dictionary: dict)

                for (_,e) in (response.dataDict?.enumerate())!{
                    self.dataArray.append(e)
                }

                dispatch_async(dispatch_get_main_queue()) {

                    self.collectionView.reloadData()
                    self.collectionView.collectionViewLayout.invalidateLayout()

                }
                self.activityIndicatorCell.stopAnimating()

                }, onError: { (error) in
                    self.activityIndicatorCell.stopAnimating()

            })

喜欢这个collectionview reloadata

谁能帮帮我?

【问题讨论】:

  • 这些行有什么问题?你有什么问题?
  • 你能显示更多的负载吗?当您收到数据时会发生什么?
  • Collectionview 没有重新加载 ....
  • 显示更多代码,你在哪里调用这些行?
  • 您可能在后台线程上获取数据。然而,UI 更新必须发生在主线程上。尝试在主线程上调用 reload 方法。希望这会有所帮助。

标签: swift uicollectionviewcell uicollectionviewlayout


【解决方案1】:

遇到了你的问题,目前我也面临同样的问题,经过一番挖掘,我想通了!

问题出在PintrestLayout 文件中

在里面你会发现类似 (PROBLEM) 的代码:

guard cache.isEmpty == true, let collectionView = collectionView else { return }

基本上,如果您应用到 CollectionView 的属性是空的(它们在开始时),则将 PintrestLayout 应用到它,那就完美了! BUT 如果你正在重新加载数据并添加到collectionView,你需要再次应用布局,但是当你再次尝试将布局应用到collectionView时缓存不是空的,因此它返回并且没有根本不工作...

解决方案

将该代码替换为:

guard cache.isEmpty == true || cache.isEmpty == false, let collectionView = collectionView else {
        return
    }

现在你说“我不在乎它是否为空,只需将该死的布局应用于我的 collectionView”

完成了!现在reloadData() 将更新您获得的单元格数量...

不过,如果您想让它更快,并减少一些内存等,这非常昂贵...然后查看 invalidateFlowLayout 文档。

【讨论】:

  • 这也适用于未来面临这个问题的任何人!
  • 这没有任何意义,是真是假?
  • @JimTierney 你的权利。回过头来看,你所需要的只是看守检查它是否为零。布尔值的结果无关紧要!
  • 非常感谢你救了我
猜你喜欢
  • 2016-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多