Размер UICollectionViewCell для 3 элементов в строке - PullRequest
0 голосов
/ 27 мая 2018

Я пытаюсь создать UICollectionView с 3 изображениями в строке.

Для начала я использовал этот код:

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
    return CGSizeMake(110, 110);
}

И это выглядит хорошо, но подходит толькоэкран iPhone X: enter image description here

Затем я попытался использовать этот код, чтобы он поместил 3 ячейки в строку:

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
    CGRect screenRect = [[UIScreen mainScreen] bounds];
    CGFloat screenWidth = screenRect.size.width;
    float cellWidth = screenWidth / 3.0;
    CGSize size = CGSizeMake(cellWidth, cellWidth);

    return size;
}

Но тогда представление будетначать выглядеть иначе: enter image description here

Это метод инициализации ячейки:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView
              cellForItemAtIndexPath:(NSIndexPath *)indexPath {
static NSString *identifier = @"TrendingCell";

TrendingCell *cell = (TrendingCell*)[collection dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];

TrendingItem * item = [[[TrendingRep sharedTrending] trendingArray] objectAtIndex:indexPath.row];

cell.text.text = item.title;

cell.image.layer.cornerRadius = cell.image.frame.size.width / 2;
cell.image.clipsToBounds = YES;

[cell.image sd_setImageWithURL:[NSURL URLWithString:item.imageUrl]
               placeholderImage:nil
                        options:SDWebImageProgressiveDownload
                      completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) {

                          [cell.progressView setHidden:NO];
}];

return cell;
}

Есть идеи, что может быть проблемой с представлением?

Ответы [ 2 ]

0 голосов
/ 27 мая 2018

Вы должны указать минимальный интервал между ячейками просмотра коллекции.Вы используете collectionviewLayout, поэтому вы должны указать минимальный интервал, как показано ниже.

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

    return CGSizeMake(**collectionView.frame.size.width/3 - 10**, collectionView.frame.size.width/3)
}

Здесь Вы можете указать минимальный интервал (например, 10) между ячейками программно.

0 голосов
/ 27 мая 2018

Похоже, вы не учитываете minimumInteritemSpacing макета.Формула для расчета ширины элемента должна быть

float cellWidth = (screenWidth - 2.0 * minimumInteritemSpacing) / 3.0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...