Я пытаюсь создать NSCollectionView
с динамическим числом секций, используя NSCollectionViewDiffableDataSource
и NSCollectionViewCompositionalLayout
.
Представление коллекции используется для отображения результатов поиска, а количество секций зависит оттип и количество найденных результатов. Каждый раздел отображает свой тип содержимого с использованием разного макета.
Источник данных объявляется как NSCollectionViewDiffableDataSource<String, SearchResult>
, где SearchResult
- это класс, реализующий Hashable
с использованием UUID()
. Разделы с нулевым результатом не являются пустыми, скорее они не существуют в представлении коллекции.
Одна из трудностей, с которыми я сталкиваюсь, заключается в определении идентификатора раздела, соответствующего sectionIndex
в sectionProvider
макета:
private func createLayout() -> NSCollectionViewLayout {
let sectionProvider = { (sectionIndex: Int, layoutEnvironment: NSCollectionLayoutEnvironment) -> NSCollectionLayoutSection in
// How can the section identifier corresponding to `sectionIndex` be determined?
// Create a `NSCollectionLayoutSection` appropriate for the section type
let section = NSCollectionLayoutSection(/* ... */)
return section
}
return NSCollectionViewCompositionalLayout(sectionProvider: sectionProvider)
}
Поскольку представление коллекции имеет различное количество разделов в зависимости от результатов поиска, тип отображаемых элементов может изменяться 0
.
См. https://github.com/sbooth/DiffableTest дляпример проекта.