14

enter image description hereAnimate UICollectionView Zellengröße ändern und neu zu positionieren umgebenden Zellen

Ziel:

Um die Änderung von einer Zelle Höhe und Neupositionierung umgebenden Zellen zu animieren.

Szenario:

Einige Zellen in einer Sammlung Ansicht Last entfernte Bilder. Zu Beginn werden diese Zellen statisch dimensioniert und ein Aktivitätsindikator wird angezeigt. Nachdem ein Bild geladen wurde, wird es seiner Zelle hinzugefügt und die Höhe der Zelle wird so geändert, dass sie zum Foto passt.

Hinweise:

Ich Animieren der Rahmenwechsel der Zelle mit animateWithDuration. Dies funktioniert gut, außer eine erhöhte Zellgröße überlappt die Zellen darunter. Ich habe blind versucht, collectionView.collectionViewLayout invalidateLayout nach dem Ändern der Größe der Zielzelle und Aktualisieren der Größe von sizeForItemAtIndexPath ohne Erfolg zurückgegeben.

Irgendwelche Vorschläge? Vielen Dank!

Beispielcode:

https://github.com/juzzin/ResizeUICollectionViewCell/blob/master/ResizeUICollectionViewCell/FLOViewController.m

enter image description here

Antwort

12

Grundsätzlich müssen Sie drei Schritte

1.invalidate die collectionViewLayout

2.Führen Batch-Updates tun:

... 
//invalidate layout 
[collectionView performBatchUpdates:^{ 
    // make your cell at indexPath return a new size 
} completion:^(BOOL finished) { 

}]; 

3.Return die neue Größe bei sizeForItemAtIndexpath

+5

Danke Daniel. Schätzen Sie Ihre schnelle und prägnante Antwort. Ich habe einen Beispielcode geschrieben und erfahren, dass performBatchUpdates Aufrufe von invalidateLayout aufruft, nachdem die Animationen abgeschlossen sind. Wenn explizit vor performBatchUpdates aufgerufen, werden Animationen übersprungen, da die Zellattribute sofort aktualisiert werden. Also, ich glaube, Sie können den ersten Schritt überspringen. – Justin

+0

Ich weiß, dass ich nicht danke sagen soll, aber ich habe mit DAYS gekämpft und die Lösung ist so einfach! VIELEN DANK!! Danke @Justin auch für den Github Link, sehr hilfreich. – Skoua

Verwandte Themen