Sto riscontrando un problema con la dimensione dell'elemento di collectionView. Voglio visualizzare 3 elementi in fila per la modalità verticale e 6 per orizzontale. Ho installato -layoutSubviews come questo:UICollectionVisualizzazione del layout di Vista - La dimensione dell'articolo non cambia
- (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];
}
Ma le dimensioni delle cellule non viene aggiornato, sempre rimanere lo stesso per entrambi gli orientamenti. Se creo 2 flowLayouts e l'uso:
[self.collectionView setCollectionViewLayout:self.flowLayoutLandscape];
tutto funziona, ma davvero non mi piace il modo in cui vengono modificati. L'animazione è davvero pessima. E poiché itemSize è l'unica proprietà che deve essere aggiornata, l'utilizzo di 1 layout sembra l'opzione migliore.
Come posso dire a collectionView di aggiornare il layout?
Grazie, questo funziona benissimo! Per i futuri lettori, è anche necessario aggiungere '[collectionView.collectionViewLayout invalidateLayout]' in 'willRotateToInterfaceOrientation:' –