---
title: NSCollectionViewCompositionalLayoutSectionProvider
framework: appkit
role: symbol
role_heading: Type Alias
path: appkit/nscollectionviewcompositionallayoutsectionprovider
---

# NSCollectionViewCompositionalLayoutSectionProvider

A closure that creates and returns each of the layout’s sections.

## Declaration

```swift
typealias NSCollectionViewCompositionalLayoutSectionProvider = (Int, any NSCollectionLayoutEnvironment) -> NSCollectionLayoutSection?
```

## Discussion

Discussion You use a section provider to create a compositional layout (NSCollectionViewCompositionalLayout) that has multiple sections with different layouts. The section provider keeps track of the index of the section that it’s currently creating, so you can configure each section differently. For example, the following code shows a section provider that creates a two-column layout in the first section, and a four-column layout in each section after the first section. func createPerSectionLayout() -> NSCollectionViewLayout {     let layout = NSCollectionViewCompositionalLayout { (sectionIndex: Int,         layoutEnvironment: NSCollectionLayoutEnvironment) -> NSCollectionLayoutSection? in                  let columns = sectionIndex == 0 ? 2 : 4                  let itemSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0),                                              heightDimension: .fractionalHeight(1.0))         let item = NSCollectionLayoutItem(layoutSize: itemSize)                  let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0),                                               heightDimension: .absolute(44))         let group = NSCollectionLayoutGroup.horizontal(layoutSize: groupSize,                                                           subitem: item,                                                             count: columns)                  let section = NSCollectionLayoutSection(group: group)         return section     }     return layout } A section provider is also invoked in response to system events such as changes in system font size. You can use this opportunity to adapt the layout to different layout environments by inspecting information about the current layout environment (NSCollectionLayoutEnvironment) and using that information to configure each section. For example, the following code shows a section provider that creates a two-column layout when the width of the section’s container is less than 800 points, and a four-column layout otherwise. func createAdaptiveLayout() -> NSCollectionViewLayout {     let layout = NSCollectionViewCompositionalLayout { (sectionIndex: Int,         layoutEnvironment: NSCollectionLayoutEnvironment) -> NSCollectionLayoutSection in

let columns = layoutEnvironment.container.effectiveContentSize.width < 800 ? 2 : 4                  let itemSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0),                                              heightDimension: .fractionalHeight(1.0))         let item = NSCollectionLayoutItem(layoutSize: itemSize)                  let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0),                                               heightDimension: .absolute(44))         let group = NSCollectionLayoutGroup.horizontal(layoutSize: groupSize,                                                           subitem: item,                                                             count: columns)                  let section = NSCollectionLayoutSection(group: group)         return section     }     return layout }

## See Also

### Layouts

- [Implementing modern collection views](uikit/implementing-modern-collection-views.md)
- [NSCollectionViewFlowLayout](appkit/nscollectionviewflowlayout.md)
- [NSCollectionViewDelegateFlowLayout](appkit/nscollectionviewdelegateflowlayout.md)
- [NSCollectionViewGridLayout](appkit/nscollectionviewgridlayout.md)
- [NSCollectionViewTransitionLayout](appkit/nscollectionviewtransitionlayout.md)
- [NSCollectionViewLayoutAttributes](appkit/nscollectionviewlayoutattributes.md)
- [NSCollectionViewLayout](appkit/nscollectionviewlayout.md)
- [NSCollectionViewCompositionalLayout](appkit/nscollectionviewcompositionallayout.md)
- [NSCollectionViewCompositionalLayoutConfiguration](appkit/nscollectionviewcompositionallayoutconfiguration.md)
- [NSCollectionLayoutSectionOrthogonalScrollingBehavior](appkit/nscollectionlayoutsectionorthogonalscrollingbehavior.md)
