UICollectionViewCompositionalLayout смещение заголовка - PullRequest
0 голосов
/ 24 февраля 2020

Я создал пользовательский макет на основе UICollectionViewCompositionalLayout, который представляет элементы каждого раздела на панели или карте ...

Panel without a header

.. здесь синяя область - это NSCollectionLayoutDecorationItem, которая передается в секцию через свойство decorationItems. Этот элемент background имеет свои собственные вставки содержимого, которые вставляют его из границ представления коллекции ( серая область ), а раздел имеет собственные вставки содержимого для вставки его в панель. Фиолетовый раздел - это 3 элемента полной ширины ( ячейки ).

Все это работает, как и ожидалось.

Однако, когда я пытаюсь добавить заголовок к каждому разделу, используя boundarySupplementaryItems, заголовок ( красный ), по-видимому, игнорирует вставки содержимого раздела, но сам раздел имеет размер, как если бы он был правильно расположен ...

Panel with a header

... заголовок прикрепляется к верхней части секции, но высота секции увеличивается на высоту заголовка + вставок.

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

let itemSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0), heightDimension: .fractionalHeight(1.0))
let item = NSCollectionLayoutItem(layoutSize: itemSize)

let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0), heightDimension: .estimated(44.0))
let group = NSCollectionLayoutGroup.vertical(layoutSize: groupSize, subitems: [item])

let headerSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0), heightDimension: .estimated(44.0))
let headerItem = NSCollectionLayoutBoundarySupplementaryItem(layoutSize: headerSize, elementKind: "header", alignment: .top)

let panelBackgroundItem = NSCollectionLayoutDecorationItem.background(elementKind: "PanelBackground")
panelBackgroundItem.contentInsets = NSDirectionalEdgeInsets(top: 4.0, leading: 8.0, bottom: 4.0, trailing: 8.0)

let section = NSCollectionLayoutSection(group: group)
section.boundarySupplementaryItems = [headerItem]
section.contentInsets = NSDirectionalEdgeInsets(top: 11.0, leading: 15.0, bottom: 11.0, trailing: 15.0)
section.decorationItems = [panelBackgroundItem]

let configuration = UICollectionViewCompositionalLayoutConfiguration()
configuration.interSectionSpacing = 4.0

let layout = UICollectionViewCompositionalLayout(section: section, configuration: configuration)
layout.register(PanelBackgroundView.self, forDecorationViewOfKind: "PanelBackground")

Может кто-нибудь посоветовать, как правильно расположить заголовок - чуть выше первого элемента в разделе и с учетом вставок содержимого, которые были установлены?

...