"Особенные" первая и последняя ячейки в секции CompositionalLayout


#1

Всем привет.

Нигде не могу найти ничего даже похожего для CompositionalLayout.
Пытаюсь получить такое представление ячеек:

  1. Первая ячейка всегда одинаковая и отличается от других
  2. Следующие ячейки обычные
  3. Последняя ячейка также отличается от других

При этом секция горизонтальная и orthoganalScrollingBehavior = .continuous

Смог достучаться до такого результата с помощью indexPath.row = 0:
image

Но когда секция начинает прокручиваться indexPath у ячеек меняется и остальные ячейки тоже начинают применять свойства первой.

Как можно реализовать такой функционал ?


#2

Покажите метод cellForItemAt


#3

Не использовал его. Как можно его реализовать ?

Также у меня реализовано несколько секций на экране, поэтому использую UICollectionViewDiffableDataSource


#4

Покажите тогда свой dataSource


#5

private func createDataSource() {

    dataSource = UICollectionViewDiffableDataSource<Section, Item>(collectionView: collectionView, cellProvider: { (collectionView, indexPath, item) -> UICollectionViewCell? in
        
        guard let section = Section(rawValue: indexPath.section) else {
            fatalError("Неизвестная секция")
        }
        
        switch section {
        case .catalog:
            if indexPath.row == 0 {
                return self.configureCatalogFirstCell(indexPath: indexPath, with: item)
            } else {
                return self.configure(cellType: CatalogCell.self, with: item, for: indexPath)
            }
        
        case .offers:
            return self.configure(cellType: ItemCell.self, with: item, for: indexPath)
            
        case .bestPrice:
            return self.configure(cellType: ItemCell.self, with: item, for: indexPath)
        }
    })
    
    dataSource?.supplementaryViewProvider = { collectionView, kind, indexPath in
        guard let sectionHeader = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: CatalogHeader.reuseId, for: indexPath) as? CatalogHeader else {
            fatalError ("Не удалось получить заголовок")
        }
        return sectionHeader
    }
}

#6

С UICollectionViewDiffableDataSource еще не приходилось работать, так что я пока только на догадках могу что-то советовать.
Можете показать заполнение секций?
Еще лучше было бы, если бы вы выложили проект в открытый доступ, если это возможно.