2014-07-11 22 views
6

Używam UICollectionView pod scenorysami AutoLayout. Próbuję ustawić rozmiar komórki na podstawie collectionView sam w sobie i jest on oparty na metodzie [collectionView: layout: sizeForItemAtIndexPath:]. collectionView zależy również od automatycznego układu i podaje nieprawidłowy rozmiar po raz pierwszy (zakładam, że to jest przed układem widoku). Wiem, że będą miały prawidłowy rozmiar po wywołaniu metody viewDidLayoutSubviews, ale powoduje to podwójny przeładunek elementów collectionView, co powoduje błędy UI w czasie wykonywania.Rozmiar komórki UICollectionView w AutoLayout

Oto [collectionView: layout: sizeForItemAtIndexPath:] metoda mojej realizacji.

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    CGSize innerSize = CGSizeMake(galleryView.frame.size.width - 80, galleryView.frame.size.height - 40); 
    GLPhotoAsset *photo = [(PCOpticsPhotoPoint *)_cluster.points[indexPath.row] photo]; 
    CGFloat ratio = MIN(innerSize.width/photo.size.width, innerSize.height/photo.size.height); 

    return CGSizeMake(photo.size.width * ratio, photo.size.height * ratio); 
} 
+0

"Próbuję ustawić rozmiar komórki na podstawie kolekcjiView" Nie podążając za tobą tutaj? –

+0

@ KyleTruscott Obliczam i zwracam rozmiar komórki na podstawie metody collectionView w metodzie [collectionView: layout: sizeForItemAtIndexPath:]. Problem polega na tym, że ta metoda jest wywoływana przed wykonaniem automatycznego układu. – Pei

+0

Czy mówisz, że rozmiar twoich komórek jest "powiązany" z ogólnym widokiem kolekcji? Być może powinieneś opublikować swoją implementację '[collectionView: layout: sizeForItemAtIndexPath:]' –

Odpowiedz

1

Upewnij się, że właściwość Podgląd klipów jest widoczna. . . .

A twoja komórka właściwości collectionViewSize musi być poprawna w rozmiarze & Sekcja Lokalizacja. . .

Może to ci pomoże. . .

0

Jak otrzymujesz zły rozmiar układu przed sizeForItemAtIndexPath: nazywa, a następnie goto storyboard i sprawdzić rozmiar komórek podane dla tych 3 - CollectionView, CollectionViewCell i CollectionViewFlowLayout

Zrób to samo. (zmień także rozmiar względem domyślnego rozmiaru kolekcji, tak jak potrzebujesz)