Mam problem z rozmiarem elementu collectionView. Chcę wyświetlić 3 elementy w wierszu dla trybu Portret i 6 dla krajobrazu. Wcześniej skonfigurować -layoutSubviews tak:Aktualizacja układu UICollectionView - wielkość elementu nie zmienia się
- (void)layoutSubviews {
[super layoutSubviews];
if ([[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationPortrait || ([[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationPortraitUpsideDown)) {
//Portrait orientation
self.flowLayoutPortrait.itemSize = CGSizeMake(106, 106);
} else if ([[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationLandscapeLeft || ([[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationLandscapeRight)) {
//Landscape orientation
self.flowLayoutPortrait.itemSize = CGSizeMake(93, 93);
}
[self.collectionView.collectionViewLayout invalidateLayout];
}
Ale wielkość komórek nie zostanie zaktualizowana, to zawsze pozostanie taka sama dla obu kierunków. Jeśli utworzyć 2 flowLayouts i zastosowanie:
[self.collectionView setCollectionViewLayout:self.flowLayoutLandscape];
wszystko działa, ale ja naprawdę nie lubię jak są zmieniane. Animacja jest naprawdę zła. A ponieważ itemSize jest jedyną właściwością, która wymaga aktualizacji, użycie 1 układu wydaje się najlepszą opcją.
Jak mogę powiedzieć collectionView, aby zaktualizować układ?
Dzięki, działa świetnie! Dla przyszłych czytelników konieczne jest również dodanie '[collectionView.collectionViewLayout invalidateLayout]' w 'willRotateToInterfaceOrientation:' –