-1

Я создаю приложение ios, и мне нужно отобразить 8 ячеек в строке в ландшафтном режиме. Также должно быть 5 строк и всего 40 ячеек. Он не должен быть независимым от устройства, будь то iPad или iPhone, такой же внешний вид должен быть доставлен.Ячейка квадратных ячеек в UICollectionView

+0

Итак, в чем ваш вопрос? –

+0

Как я могу это достичь? – elifyilbasi

+0

Нужны ли вам ячейки квадратной формы? – Kujey

ответ

0

Ответ Jpark822 правильный, однако вы будете бороться с расстоянием и смещением ваших ячеек.

Что вы можете сделать, это использовать UICollectionViewFlowLayout подкласс:

Давайте назовем это PrettyLayout!

@implementation PrettyFlowLayout 

#define itemCountPerLine 8 
#define itemCountPerColumn 5 

-(void) prepareLayout 
{ 
    CGFloat lineSpacing = ([self collectionViewContentSize].width - self.itemSize.width * itemCountPerLine)/(itemCountPerLine + 1); 
    CGFloat interItemSpacing = ([self collectionViewContentSize].height - self.itemSize.height * itemCountPerColumn)/(itemCountPerColumn + 1); 

    self.minimumLineSpacing = lineSpacing; 
    self.minimumInteritemSpacing = interItemSpacing; 

    self.sectionInset = UIEdgeInsetsMake(interItemSpacing, lineSpacing, interItemSpacing, lineSpacing); 
} 

- (CGSize)itemSize 
{ 
    int size; 

    size = (int) MIN(self.collectionView.frame.size.width/itemCountPerLine, self.collectionView.frame.size.height/itemCountPerColumn) 

    return CGSizeMake((CGFloat)size, (CGFloat)size); 
} 

@end 

Тогда все, что вам нужно сделать, это объявить экземпляр PrettyLayout как макет вашего CollectionView.

PS: Не пытался мой код, надеюсь, что он сработает

+1

Не работает, если разделенная ширина является десятичной с десятичным значением, превышающим 0,5. Допустим, ваша общая ширина экрана равна 750, разделенная на 8 - 93,75. Если вы поместите это как ширину ячейки, фактическая ширина будет 94px, что приведет к суммарному количеству пикселей 752, что означает, что последняя ячейка будет в следующей строке. –

+0

Вы правы, отредактировал мой код – Kujey

+0

@ Kujey, он работал без ошибок, спасибо. – elifyilbasi

0

Убедитесь, что вы реализуете UICollectionViewDelegate and UICollectionViewDataSource

затем назначить делегата и данных источника: myCollectionView.delegate = self; myCollectionView.dataSource = self;

затем использовать DataSource и делегировать методы в CollectionView, чтобы передать ему информацию в контроллере представления:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView { }

- (NSInteger)collectionView:(UICollectionView *)collectionView

Вы можете иметь 5 разделов 8 пунктов каждый, или просто один большой участок 40

Если вы хотите, чтобы указать размер вашего зрения сбора клеток, а затем реализовать UICollectionViewDelegateFlowLayout то вы можете использовать метод делегата:

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath

, чтобы указать размер. таким образом, вы можете настроить свое представление таким образом, чтобы вы могли сразу отобразить все 5 строк по 8

Смежные вопросы