14

enter image description hereanimare UICollectionView cambio formato delle cellule e cellule riposiziona circostante

Calcio:

di animare la variazione di altezza di una cella e cellule circostanti riposizionare.

Scenario:

Alcune cellule in una vista raccolta carico immagini remote. Inizialmente, quelle celle sono dimensionate staticamente e viene mostrato un indicatore di attività. Dopo che un'immagine è stata caricata, viene aggiunta alla sua cella e l'altezza della cella viene modificata per adattarsi alla foto.

Note:

sto animando cambiamento telaio della cella con animateWithDuration. Funziona benissimo, a parte un aumento della dimensione delle celle che si sovrappone alle celle sottostanti. Ho tentato in modo cieco di chiamare collectionView.collectionViewLayout invalidateLayout dopo aver ridimensionato la cella di destinazione e aggiornato la dimensione restituita da sizeForItemAtIndexPath senza esito positivo.

Qualche suggerimento? Grazie!

codice di esempio:

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

enter image description here

risposta

12

Fondamentalmente è necessario fare tre passi

1.invalidate il collectionViewLayout

2.Eseguire aggiornamenti batch:

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

}]; 

3.Return la nuova dimensione al sizeForItemAtIndexpath

+5

Grazie Daniel. Apprezzo la tua risposta rapida e concisa. Ho pubblicato alcuni esempi di codice e ho appreso che eseguireBatchUpdates chiama invalidateLayout dopo che le animazioni sono state completate. Se viene chiamato esplicitamente prima di performBatchUpdates, le animazioni vengono saltate poiché gli attributi della cella vengono immediatamente aggiornati. Quindi, credo che tu possa saltare il primo passo. – Justin

+0

So che non dovrei dire grazie, ma ho lottato con questo per GIORNI e la soluzione è così semplice! GRAZIE!! Grazie anche a @Justin per il link Github, molto utile. – Skoua