2016-08-03 89 views
0

重装的问题这是refrence链接:多在UICollectionView在最后一个单元格UICollectionView自定义布局斯威夫特

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

我已经实现负载中的数据被下载,下载后完成,我想重装收集

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

任何一个能帮助我吗?

+0

这些行有什么问题?你的问题是什么? – Larme

+0

你可以显示更多的负载?当你收到数据时发生了什么? – kiera91

+0

Collectionview不重载.... – Ravi

回答

0

进入你的问题,目前面临同样的问题,经过一些挖掘我想通了!

的问题是PintrestLayout文件

内里面你会发现像(问题)代码:

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

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

SOLUTION

替换代码:

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

现在你说:“我不关心,如果它为空或不,只是采用了该死的布局,我的CollectionView”

完成!现在reloadData()会更新你有多少个单元...

虽然这很贵,但是如果你想让速度更快,并修剪一些内存等......然后看看invalidateFlowLayout文档。

+0

这也适用于将来面临这个问题的任何人! – amirkrd