2015-05-09 6 views
1

Я хочу сделать экран, в котором открывается коллекция. Ячейка должна заполнять всю ширину экрана, в то время как устройство находится на портрете, и когда устройство поворачивает изображение коллекции, показывает 2 ячейки в 1 разделе.iOS UICollectionvView ячейка различной компоновки для пейзажа и портрета

Для лучшей визуализации см. Изображение ниже.

enter image description here

enter image description here

Я попытался сделать ширину ячейки = ширина устройства (портрет), но в альбомной ячейка показывает в центре экрана.

Можно ли сделать такой дизайн, используя коллекцию? Если это возможно, то как мне это достичь? ИЛИ любая другая идея будет оценена по достоинству.

+0

Я думаю, ваш вопрос очень похож на http://stackoverflow.com/questions/13556554/change-uicollectionviewcell- size-on-different-device-orientation – Asaf

ответ

1

Используйте класс размера, чтобы расположить пейзаж или портрет по-разному.

Посмотрите на эту статью Детальные go to Add constraints for generic size class

+0

Это лучший способ добиться этого, поскольку он позволяет лучше контролировать расположение ячейки. – milesper

0

Вы можете попробовать этот

#define kNumberOfCellsInARowPortrait 1 
#define kNumberOfCellsInARowLandscape 2 

- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section 
{ 
    return 0; 
} 

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (UIInterfaceOrientationIsLandscape(UIApplication.sharedApplication.statusBarOrientation)) { 
     CGFloat cellWidth = floor((CGRectGetWidth(collectionView.bounds)-5)/kNumberOfCellsInARowLandscape); 
     return CGSizeMake(cellWidth, cellWidth); 
    } else { 
     CGFloat cellWidth = floor((CGRectGetWidth(collectionView.bounds)-5)/kNumberOfCellsInARowPortrait); 
     return CGSizeMake(cellWidth, cellWidth); 
    } 
} 

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
{ 
    [self.collectionView reloadData]; 
} 
Смежные вопросы