2016-08-03 26 views
0

Dies ist refrence Link:UICollectionView Benutzerdefinierte Layout Ausgabe in Swift Nachladen

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

ich in UICollectionView zuletzt Zelle mehr Last implementiert haben, werden die Daten heruntergeladen zu werden, nachdem der Download abgeschlossen i Sammlung neu geladen werden soll

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() 

      }) 

wie diese Kollektion reloadata

Kann jemand mir helfen?

+0

Und was ist los mit diesen Linien? Was ist dein Problem? – Larme

+0

Können Sie die Last mehr anzeigen? Was passiert, wenn Sie die Daten erhalten? – kiera91

+0

Collectionview wird nicht neu geladen .... – Ravi

Antwort

0

Sind in Ihre Frage gelaufen und stehen derzeit vor dem gleichen Problem, nach einigem Graben habe ich es herausgefunden!

Das Problem ist in der PintrestLayout Datei

Innerhalb Sie Code wie (PROBLEM) zu finden:

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

Grundsätzlich, wenn die Attribute, die Sie in die Collection bewerben sind leer (sie sind am Anfang), wenden Sie das PintrestLayout darauf an, und das ist perfekt! ABER Wenn Sie die Daten erneut laden und zur Auflistung hinzufügen, müssen Sie das Layout erneut anwenden, aber der Cache ist nicht leer, wenn Sie das Layout erneut auf die Auflistungsansicht anwenden. Daher wird es zurückgegeben und funktioniert überhaupt nicht ...

SOLUTION:

diesen Code ersetzen:

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

Jetzt sind Sie sagen "i dont care, wenn sein leer oder nicht, nur das verdammte Layout meiner Kollektion anwenden"

Und fertig! Jetzt reloadData() wird aktualisiert, wie viele Zellen Sie haben ...

Dies ist ziemlich teuer, wenn Sie es schneller machen wollen, und etwas Speicher usw. trimmen ... Dann schauen Sie in invalidateFlowLayout Dokumentation.

+0

Das geht für jeden in der Zukunft mit diesem Problem auch konfrontiert! – amirkrd