14

enter image description hereAnimacja UICollectionView zmiana rozmiaru i położenia komórek otaczających komórki

Cel:

animowanie zmiany wysokości komórce i otaczających komórek repozycji.

Scenariusz:

Niektóre komórki w widoku kolekcji obciążenia odległych obrazów. Początkowo te komórki mają rozmiar statyczny i wyświetlany jest wskaźnik aktywności. Po załadowaniu obrazu zostaje on dodany do komórki, a wysokość komórki zostaje zmieniona w celu dopasowania do zdjęcia.

Uwagi:

ja animowanie zmiany ramka komórki z animateWithDuration. Działa to dobrze, z wyjątkiem tego, że zwiększony rozmiar komórki zachodzi na komórki poniżej. Po próbie zmiany rozmiaru komórki docelowej i aktualizacji rozmiaru zwróconego przez sizeForItemAtIndexPath, na ślepo próbowałem wywoływać numer collectionView.collectionViewLayout invalidateLayout bez powodzenia.

Wszelkie sugestie? Dziękuję Ci!

Przykładowy kod:

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

enter image description here

Odpowiedz

12

Zasadniczo trzeba zrobić trzy kroki

1.invalidate się collectionViewLayout

2.perform aktualizacje partii:

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

}]; 

3.Return nowego rozmiaru w sizeForItemAtIndexpath

+5

Dziękuję Daniel. Doceń swoją szybką i zwięzłą odpowiedź. Wysłałem przykładowy kod i dowiedziałem się, że wywołania performBatchUpdates invalidateLayout po zakończeniu animacji. Jeśli zostanie jawnie wywołana przed wykonaniem funkcji BatchUpdates, animacje są pomijane, ponieważ atrybuty komórki są natychmiast aktualizowane. Sądzę, że możesz pominąć pierwszy krok. – Justin

+0

Wiem, że nie powinienem dziękować, ale zmagałem się z tym przez DAYS, a rozwiązanie jest takie proste! DZIĘKI!! Dzięki @Justin za link do Githuba, bardzo pomocny. – Skoua