I implemented this code (XCode 11.2:
h ttps://medium.com/flawless-app-stories/all-what-you-need-to-know-about-uicollectionviewcompositionallayout-f3b2f590bdbe
I was specially interested in the supplementaryViews for compositionalLayout.
And discovered the leading and trailing headers:
private func createLayout() -> UICollectionViewLayout {
let itemSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0),
heightDimension: .fractionalHeight(1.0))
let item = NSCollectionLayoutItem(layoutSize: itemSize)
item.contentInsets = NSDirectionalEdgeInsets(top: 8, leading: 8, bottom: 8, trailing: 8)
let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(0.9),
heightDimension: .absolute(50))
let group = NSCollectionLayoutGroup.horizontal(layoutSize: groupSize,
subitems: [item])
group.edgeSpacing = NSCollectionLayoutEdgeSpacing(leading: .flexible(0),
top: nil,
trailing: nil,
bottom: nil)
let footerHeaderSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0),
heightDimension: .absolute(50.0))
let leftSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(0.1),
heightDimension: .absolute(150.0))
let header = NSCollectionLayoutBoundarySupplementaryItem(layoutSize: footerHeaderSize,
elementKind: HeaderFooterViewController.headerKind,
alignment: .top)
let footer = NSCollectionLayoutBoundarySupplementaryItem(layoutSize: footerHeaderSize,
elementKind: HeaderFooterViewController.footerKind,
alignment: .bottom)
let left = NSCollectionLayoutBoundarySupplementaryItem(layoutSize: leftSize,
elementKind: HeaderFooterViewController.leadingKind,
alignment: .leading)
let section = NSCollectionLayoutSection(group: group)
section.boundarySupplementaryItems = [header, footer, left]
let config = UICollectionViewCompositionalLayoutConfiguration()
config.interSectionSpacing = 16
let layout = UICollectionViewCompositionalLayout(section: section, configuration: config)
return layout
}
There is one point though.
For headers, I changed elementKind: HeaderFooterViewController.headerKind to elementKind: UICollectionView.elementKindSectionHeader ; it works pefectly.
For left, I need to change elementKind: HeaderFooterViewController.leadingKind in a similar way, but to which elementKind ? elementKindLeading does not compiles…
Does CollectionView support these leading and trailing supplementary items ? They are not referenced in doc:
Class. UICollectionView
class let elementKindSectionFooter: String
class let elementKindSectionHeader: String