2013-08-16 16 views
17

Mam wspólny UICollectionView z stronicowania i wszystko.UICollectionView wrong contentSize przy pierwszym załadowaniu, poprawne po tym

Ciągle próbuje dowiedzieć się, dlaczego na viewDidLoad :, viewWillAppear: i viewDidAppear:, tylko przy pierwszym wywołaniu widoku, otrzymuję nieprawidłowy rozmiar podczas wywoływania myCollectionView.collectionView.contentSize.width. Zawsze odpowiada 0 szerokością (wysokość jest zawsze poprawna). Kolejne przeładowanie widoku sprawia, że ​​mam poprawny.

uciekają się do korzystania

self.collectionView.collectionViewLayout.collectionViewContentSize 

które dają mi prawidłową szerokość zdarzenie na pierwszym obciążeniu.

Wciąż dla mnie zagadką.

+0

Jestem pewien, że jest to coś wspólnego z autolayout .. spróbuj go wyłączyć – abbood

+0

Już wyłączony, pierwszą rzeczą, którą też pomyślałem. Wygląda na to, że nie ładuje on widoku wystarczająco szybko, ponieważ po ponownym pojawieniu się szerokość jest poprawna (np. Po powrocie do tego samego widoku). – klauslanza

+0

Czy kiedykolwiek znalazłeś odpowiedź na ten problem? –

Odpowiedz

32

Widziałem podobny problem, w którym szerokość contentSize była zawsze równa zero. Prosta odpowiedź brzmi: prawdopodobnie nie ma jeszcze treści w kolekcjiView. Właśnie dlatego jego rozmiar treści wynosi zero.

Zauważyłem również, że czasami po wywołaniu invalidateLayout na moim UICollectionView, widziałem, że self.collectionView.collectionViewLayout.collectionViewContentSize nie było takie samo jak self.collectionView.contentSize.

Po długich poszukiwaniach znalazłem wielką wskazówkę here in this SO post

Co muszę zrobić, aby oba obliczeń contentSize być taka sama była zadzwonić [self.collectionView layoutIfNeeded] natychmiast po wywołaniu [self.collectionView reloadData] lub [self.collectionView.collectionViewLayout invalidateLayout].

To zasadniczo zmusza przeładowanie do wykonania natychmiast, zamiast do następnego cyklu runloopa.

Naprawdę mam nadzieję, że to rozwiązuje twój problem.

+0

Uratowałeś mi życie. : D Dziękuję bardzo. @ucangetit – iPeter

Powiązane problemy