iOS UICollectionvView различно оформление на клетка за пейзаж и портрет

Искам да направя екран, в който изгледът на колекцията трябва да запълва цялата ширина на екрана, докато устройството е в портретна ориентация, а когато устройството се завърти, изгледът на колекцията показва 2 клетки в 1 секция.

За по-добра визуализация вижте изображението по-долу.

въведете описание на изображението тук

въведете описание на изображението тук

Опитах се да направя ширина на клетката = ширина на устройството (за портрет), но в пейзаж клетката се показва в центъра на екрана.

Ще бъде ли възможно да се направи такъв дизайн с изглед на колекция? Ако е възможно, тогава как да постигна това? ИЛИ всяка друга идея ще бъде оценена.


person Apple_Magic    schedule 09.05.2015    source източник
comment
Мисля, че въпросът ви е много подобен на stackoverflow.com/questions/13556554/   -  person Asaf    schedule 09.05.2015


Отговори (2)


Използвайте клас размер, за да позиционирате пейзаж или портрет по различни начини.

Разгледайте тази подробна статия отидете на Добавяне на ограничения за общ размер клас

person MacKentoch    schedule 09.05.2015
comment
Това е най-добрият начин да постигнете това, тъй като позволява по-добър контрол върху оформлението на клетката. - person mginn; 11.05.2015

Можете да опитате това

#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];
}
person kamil3    schedule 20.02.2016