UICompositionalLayout не работает должным образом (вертикальная прокрутка таблицы + горизонтальная разбивка на страницы)

Я копался в "новом" api композиционного макета, представленном в iOS 13, надеясь найти решение надуманного подхода встраивания UITableView внутри UICollectionViewCell. Я использовал это решение, вызывающее головную боль, в прошлом, чтобы обеспечить горизонтальную прокрутку страницы и вертикальную прокрутку таблицы одновременно. Это очень громоздкий способ делать что-то, и с тех порCompositionalLayout было объявлено, что я очень хочу попробовать его рефакторинг.

Пока не повезло. Я могу заставить работать горизонтальную и вертикальную прокрутку, но не могу обойтись без поведения "App Store", когда каждая строка прокручивается по горизонтали независимо. Кому-нибудь повезло реализовать подобное решение?

Это мой код для CollectionViewLayout:

func createOrthogonalScrollingLayout() -> UICollectionViewLayout {


    let itemSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0), heightDimension: .fractionalHeight(0.5))
    let item = NSCollectionLayoutItem(layoutSize: itemSize)

    let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0), heightDimension: .fractionalHeight(1.0))
    let group = NSCollectionLayoutGroup.vertical(layoutSize: groupSize, subitems: [item])

    let section = NSCollectionLayoutSection(group: group)
    section.orthogonalScrollingBehavior = .groupPagingCentered
    section.interGroupSpacing = 16
    section.contentInsets = NSDirectionalEdgeInsets(top: 0, leading: 16, bottom: 0, trailing: 16)


    let layout = UICollectionViewCompositionalLayout(section: section)

    return layout

}

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

Спасибо

1 ответ

groupSize height должен быть высотой вашей ячейки, например, вот так:

      let itemSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0), heightDimension: .fractionalHeight(1.0))
let item = NSCollectionLayoutItem(layoutSize: itemSize)
    
let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(0.8), heightDimension: .absolute(250.0))
let group = NSCollectionLayoutGroup.vertical(layoutSize: groupSize, subitems: [item])
Другие вопросы по тегам