Проблемы автоматического макета с NSCollectionViewCompositionalLayout - PullRequest
0 голосов
/ 10 июля 2020

Я создаю представление коллекции, где разделы имеют содержимое с вертикальной прокруткой (с видом с бесконечной прокруткой), и все разделы размещаются рядом друг с другом (здесь также используется представление с бесконечной прокруткой, но горизонтально). Похоже на это изображение .

Я столкнулся с несколькими проблемами:

  1. Вид заголовка находится под представлением коллекции в иерархии представлений (это не ' t hidden или enabled, это просто покрыто остальной частью представления коллекции), раздел смещения не помогает, потому что он скрыт под всем представлением коллекции, а не только с разделом. Вот снимок экрана , где справа вверху находятся первые подпредставления в иерархии представлений, а слева - последние (с вырезанными несвязанными представлениями сзади).
  2. Мои элементы имеют динамически сгенерированный размер ( реализовано с автоматическим макетом в файле .xib), но значение .estimated() композиционного макета не изменяется на заданную высоту содержимого ячейки (ширина остается одинаковой для всех ячеек).

Вот мой код:

    func createCompositionalLayout() -> NSCollectionViewLayout {
        let itemSize = NSCollectionLayoutSize(widthDimension: .absolute(300), heightDimension: .estimated(170))
        
        let item = NSCollectionLayoutItem(layoutSize: itemSize)
        
        let groupSize = NSCollectionLayoutSize(widthDimension: .absolute(300), heightDimension: .estimated(150))
        
        let group = NSCollectionLayoutGroup.vertical(layoutSize: groupSize, subitem: item, count: 1)
        
        let section = NSCollectionLayoutSection(group: group)
        section.interGroupSpacing = 30
        section.orthogonalScrollingBehavior = .continuous
        let layoutSectionHeaderItemSize = NSCollectionLayoutSize(widthDimension: .absolute(300), heightDimension: .absolute(200))
        let layoutSectionHeaderItem = NSCollectionLayoutBoundarySupplementaryItem(layoutSize: layoutSectionHeaderItemSize, elementKind: NSCollectionView.elementKindSectionHeader, alignment: .top)
    section.boundarySupplementaryItems = [layoutSectionHeaderItem]

        
        let configuration = NSCollectionViewCompositionalLayoutConfiguration()
        configuration.scrollDirection = .horizontal
        configuration.interSectionSpacing = 30
    
        let layout = NSCollectionViewCompositionalLayout(section: section, configuration: configuration)
        
        return layout
    }

...