1) Вы можете поддерживать и менять несколько объектов макета, но есть более простой способ. Просто добавьте следующее в свой UICollectionViewController
подкласс и отрегулируйте размеры по мере необходимости:
- (CGSize)collectionView:(UICollectionView *)collectionView
layout:(UICollectionViewLayout *)collectionViewLayout
sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
// Adjust cell size for orientation
if (UIDeviceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation])) {
return CGSizeMake(170.f, 170.f);
}
return CGSizeMake(192.f, 192.f);
}
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
[self.collectionView performBatchUpdates:nil completion:nil];
}
Вызов -performBatchUpdates:completion:
аннулирует макет и изменяет размер ячеек с помощью анимации (вы можете просто передать nil обоим параметрам блока, если у вас нет дополнительных настроек для выполнения).
2) Вместо жесткого кодирования размеров элементов в -collectionView:layout:sizeForItemAtIndexPath
, просто разделите высоту или ширину границ collectionView на количество ячеек, которые вы хотите разместить на экране. Используйте высоту, если ваш collectionView прокручивается по горизонтали, или ширину, если он прокручивается по вертикали.