Заголовок композиционного макета UICollectionView с pinToVisibleBounds странным образом скрыт ячейками - PullRequest
0 голосов
/ 14 апреля 2020

Я использую UICollectionView Compositional Layout и хочу иметь заголовок, который придерживается вершины

, это должно быть возможно с

header.pinToVisibleBounds = true

, однако во время прокрутки заголовок странным образом затеняется, выглядит как ошибка ... более того, при перезагрузке выглядит только те ячейки, которые были вне видимого экрана, затемняйте заголовок

swift

вы можете увидеть это в этом видео https://www.dropbox.com/s/n5myzfceuiwzb39/stackoverflow-unsatable-header.mov?dl=0

вот как строится весь макет

func buildLayout() -> UICollectionViewCompositionalLayout {

    // cells
    let itemSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(0.5), heightDimension: .absolute(90))
    let item = NSCollectionLayoutItem(layoutSize: itemSize)
    item.contentInsets = NSDirectionalEdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 0)

    let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1), heightDimension: .absolute(90))
    let group = NSCollectionLayoutGroup.horizontal(layoutSize: groupSize, subitem: item, count: 2)
    group.contentInsets = NSDirectionalEdgeInsets(top: 0, leading: 20, bottom: 0, trailing: 20)
    group.interItemSpacing = .fixed(10)

    let section = NSCollectionLayoutSection(group: group)
    section.interGroupSpacing = 10
    section.contentInsets = NSDirectionalEdgeInsets(top: 20, leading: 0, bottom: 20, trailing: 0)

    // header
    let headerSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0), heightDimension: .absolute(200))
    let header = NSCollectionLayoutBoundarySupplementaryItem(layoutSize: headerSize, elementKind: UICollectionView.elementKindSectionHeader, alignment: .top)
    header.pinToVisibleBounds = true
    header.zIndex = Int.max
    section.boundarySupplementaryItems = [header]

    let configuration = UICollectionViewCompositionalLayoutConfiguration()
    return UICollectionViewCompositionalLayout(section: section, configuration: configuration)
}

Что такое обходной путь? или каким другим способом иметь «плавающий» заголовок?


ПРИМЕЧАНИЕ 1:

выглядит, когда заголовок присоединен к configuration.boundarySupplementaryItems он ведет себя как ожидалось ... через это может быть решением текущего случая, он не решает общую проблему с разделом ... (вы также должны установить zIndex на очень большое число)

do {
    center.contentInsets.top = 0
    let headerSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0), heightDimension: .absolute(200))
    let header = NSCollectionLayoutBoundarySupplementaryItem(layoutSize: headerSize, elementKind: UICollectionView.elementKindSectionHeader, alignment: .top)
    header.pinToVisibleBounds = true
    header.zIndex = Int.max // !!! IMPORTANT
    //header.extendsBoundary = true
    configuration.boundarySupplementaryItems = [header]
}
...