Я создал пользовательский макет на основе UICollectionViewCompositionalLayout
, который представляет элементы каждого раздела на панели или карте ...
.. здесь синяя область - это NSCollectionLayoutDecorationItem
, которая передается в секцию через свойство decorationItems
. Этот элемент background имеет свои собственные вставки содержимого, которые вставляют его из границ представления коллекции ( серая область ), а раздел имеет собственные вставки содержимого для вставки его в панель. Фиолетовый раздел - это 3 элемента полной ширины ( ячейки ).
Все это работает, как и ожидалось.
Однако, когда я пытаюсь добавить заголовок к каждому разделу, используя boundarySupplementaryItems
, заголовок ( красный ), по-видимому, игнорирует вставки содержимого раздела, но сам раздел имеет размер, как если бы он был правильно расположен ...
... заголовок прикрепляется к верхней части секции, но высота секции увеличивается на высоту заголовка + вставок.
Вот код, который я использую для генерации макета ...
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")
Может кто-нибудь посоветовать, как правильно расположить заголовок - чуть выше первого элемента в разделе и с учетом вставок содержимого, которые были установлены?