UICollectionViewCompositionalLayout избегает ненужного разрыва строки

Я использую UICollectionViewCompositionalLayout с очень простой компоновкой

  • Один layoutItem с расчетной шириной и высотой
  • внутри одного макета Группа с расчетной высотой и долей ширины
  • внутри одной секции

все ячейки являются экземплярами UILabel.

На следующем изображении представлены четыре различных случая такого UICollectionView:

Проблема: через "28 мин" и через "40 мин" UICollectionViewCompositionalLayout создает разрыв строки, занимающий много места, без отображения элемента в этом свободном пространстве.

После "33 мин" все ок. Без разрыва строки, без лишнего места.

Разница между двумя случаями: - после "28 мин" и после "40 мин" остается немного места до края -> создается разрыв строки - после "33 мин" остается немного больше места. -> без разрыва строки.

Это полностью воспроизводимо. Небольшое пространство между элементом и краем приводит к ненужным разрывам строк.

Что я могу сделать с этими ненужными разрывами строк? Я бы предпочел не использоватьFlowLayout потому что я активно использую значки, которые здесь не отображаются, и это отлично работает.

func createLegsLayout(itinerary: RouteItineraryProtocol) -> NSCollectionLayoutSection? {
    // omitted code for badges

    let estimatedItemHeight: NSCollectionLayoutDimension = .estimated(40)
    let legItemSize = NSCollectionLayoutSize(widthDimension: .estimated(70), heightDimension: estimatedItemHeight)

    let legItem = NSCollectionLayoutItem(layoutSize: legItemSize, supplementaryItems: [legBadge])
    let legGroupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0), heightDimension: estimatedItemHeight)

    let legGroup = NSCollectionLayoutGroup.horizontal(layoutSize: legGroupSize, subitems: [legItem])
    legGroup.interItemSpacing = self.design.legInteritemSpacing
    legGroup.edgeSpacing = NSCollectionLayoutEdgeSpacing(leading: nil, top: nil, trailing: nil, bottom: .fixed(6))

    //print(legGroup.visualDescription())
    let section = NSCollectionLayoutSection(group: legGroup)
    return section
}

0 ответов

Другие вопросы по тегам