Swift 中的 UICollectionView 自定义布局重新加载问题
Posted
技术标签:
【中文标题】Swift 中的 UICollectionView 自定义布局重新加载问题【英文标题】:UICollectionView Custom layout reloading issue in Swift 【发布时间】: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 方法。希望这会有所帮助。 【参考方案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 你的权利。回过头来看,你所需要的只是看守检查它是否为零。布尔值的结果无关紧要! 非常感谢你救了我以上是关于Swift 中的 UICollectionView 自定义布局重新加载问题的主要内容,如果未能解决你的问题,请参考以下文章
Swift 中的 UICollectionView 自定义布局重新加载问题
UICollectionView 中的 Alamofire + Swift
Swift 中的 UICollectionView 自定义布局
Swift 3 中的 UICollectionView 自定义按钮操作