Ячейка находится в центре представления коллекции, когда есть только одна ячейка - PullRequest
0 голосов
/ 12 апреля 2019

Я хочу расположить ячейки слева направо. Поэтому я использую UICollectionViewFlowLayout:

UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
// use this for let cell width fit for label width
layout.estimatedItemSize = CGSizeMake(80, 30);
self.collectionView = [[UICollectionView alloc] initWithFrame:self.view.bounds collectionViewLayout:layout];

Ширина ячейки соответствует ширине ярлыка:

// cell code
@implementation CQGoodsSearchCell

- (void)setupUI {
    self.contentView.layer.cornerRadius = 15;
    self.contentView.layer.masksToBounds = YES;
    self.contentView.backgroundColor = [UIColor colorWithRed:1.00 green:1.00 blue:1.00 alpha:1.00];

    self.nameLabel = [[UILabel alloc] init];
    [self.contentView addSubview:self.nameLabel];
    self.nameLabel.font = [UIFont systemFontOfSize:15];
    self.nameLabel.textColor = [UIColor colorWithRed:0.18 green:0.18 blue:0.18 alpha:1.00];
    [self.nameLabel mas_makeConstraints:^(MASConstraintMaker *make) {
        make.height.mas_equalTo(30);
        make.top.bottom.mas_offset(0);
        make.left.mas_offset(10);
        make.right.mas_offset(-10);
    }];
}

Все идет хорошо, когда имеется более одной клетки:

Two cells aligned to the left

Однако ячейка находится в центре, когда имеется только одна ячейка:

One cell in the center

Если я использую itemSize вместо estimatedItemSize, все в порядке:

layout.itemSize = CGSizeMake(80, 30);

Once cell aligned to the left* * 1030

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

Так есть ли способ избежать этого?

1 Ответ

1 голос
/ 12 апреля 2019

По сути, это та же проблема, которую я обсуждаю здесь:

https://stackoverflow.com/a/52428617/341994

В итоге, функция, которую вы пытаетесь использовать, самоизмеряющие ячейки представления коллекции не работает и никогда не работал.Вот почему, как вы правильно сказали,

Если я использую itemSize вместо estimatedItemSize, все будет в порядке

Это верно!Это не твоя ошибка;это ошибка iOS.Саморазмерные ячейки представления коллекции не работают .Либо приложение аварийно завершает работу, либо структура потока неверна.

Так что это решение.Не используйте estimatedItemSize.Вместо этого рассчитайте правильный размер самостоятельно и укажите его в вашей реализации

func collectionView(_ collectionView: UICollectionView, 
    layout collectionViewLayout: UICollectionViewLayout, 
    sizeForItemAt indexPath: IndexPath) -> CGSize {
        // calculate/obtain correct size and return it
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...