Изменить пространство между UICollecionViewCell - PullRequest
0 голосов
/ 08 июня 2018

У меня есть CollectionView.Вот реализация для моего CollectionView.

- (void)setupCollectionView{
    self.flowLayout = [[UICollectionViewFlowLayout alloc] init];
    [self.flowLayout setSectionInset:UIEdgeInsetsMake(0, 20, 0, 0)];
    self.flowLayout.itemSize = CGSizeMake(150, 35);
    self.flowLayout.minimumLineSpacing = 20;
    [self.flowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal];

    self.vwCollectionView = [[UICollectionView alloc]initWithFrame:CGRectMake(0, 0, self.vwQuickReplyContainer.frame.size.width, self.vwQuickReplyContainer.frame.size.height) collectionViewLayout:self.flowLayout];
    self.vwCollectionView.backgroundColor = [UIColor clearColor];
    [self.vwCollectionView registerNib:[UINib nibWithNibName:@"QuickrepliesCell" bundle:nil] forCellWithReuseIdentifier:@"QuickrepliesCell"];
    [self.vwQuickReplyContainer addSubview:self.vwCollectionView];
    self.vwQuickReplyContainer.hidden = YES;
    [self.vwCollectionView setShowsHorizontalScrollIndicator:NO];

    [self.vwCollectionView setDataSource:self];
    [self.vwCollectionView setDelegate:self];
    [self.vwCollectionView reloadData];
}

Здесь я установил minimalLineSpacing, чтобы установить минимальное расстояние между последовательными столбцами.В соответствии с этой документацией , я понимаю, что значение представляет минимальное расстояние между последовательными столбцами для горизонтально прокручиваемой сетки.Мне также было установлено пространство между моими камерами.Вот результаты этого enter image description here.

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

- (QuickrepliesCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
    self.cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"QuickrepliesCell" forIndexPath:indexPath];
    QuickReply *model = [[QuickReply alloc]initWithDictionary:self.quickRepliesArr[indexPath.row] error:nil];
    self.cell.lblOpion.text = model.title;
    CGFloat width =  [self.cell.lblOpion.text sizeWithFont:WWLATOREGULAR(15)].width;
    self.cell.frame = CGRectMake(self.cell.frame.origin.x, self.cell.frame.origin.y, width + 24, self.cell.frame.size.height);
    return self.cell;
}

Вот результаты после обновления ширины ячейки. enter image description here.

Я незнать причину, по которой пространство между моими клетками изменилось после изменения размера ячейки.Может кто-нибудь советовать по этому поводу?спасибо.

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Вместо установки свойства itemSize макета на фиксированный размер, внедрите метод делегата макета collectionView:layout:sizeForItemAtIndexPath:.

Затем вы можете установить правильный размер каждого элемента.

0 голосов
/ 08 июня 2018

Для этого вам нужно рассчитать и изменить размер предмета в collectionView:layout:sizeForItemAtIndexPath:

- (QuickrepliesCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
  self.cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"QuickrepliesCell" forIndexPath:indexPath];
  QuickReply *model = [[QuickReply alloc]initWithDictionary:self.quickRepliesArr[indexPath.row] error:nil];
  self.cell.lblOpion.text = model.title;
  return self.cell;
}

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
  QuickReply *model = [[QuickReply alloc]initWithDictionary:self.quickRepliesArr[indexPath.row] error:nil];
  CGFloat width =  [model.title sizeWithFont:WWLATOREGULAR(15)].width;
  return CGSizeMake(width + 24, 35);
}
...