【问题标题】:UICollectionViewCompositionalLayout set contentOffsetUICollectionViewCompositionalLayout 设置 contentOffset
【发布时间】:2022-10-26 04:00:56
【问题描述】:

我想知道现在,使用组合布局为集合视图设置contentOffset 的当前方式(如果有的话)是什么。
我知道 CompositionalLayout 构建不同,每个部分都有自己的嵌入式滚动视图,这就是为什么我们必须使用 visibleItemsInvalidationHandler 来获取 contentOffset 而不是好的旧的 scrollViewDidScroll(_ scrollView: UIScrollView) 委托。但我似乎找不到任何将contentOffset 设置回集合视图(部分或整个组合)的 api。

对于更具体的示例,假设我们有一个集合视图和一个滚动视图,我想在它们之间同步垂直滚动:

集合视图:

private lazy var collectionView: UICollectionView = {
        let collectionViewLayout = createCompositionalLayout()
        return UICollectionView(frame: .zero, collectionViewLayout: collectionViewLayout)
    }()

布局:

    private func createCompositionalLayout() -> UICollectionViewLayout {
        let layout = UICollectionViewCompositionalLayout { sectionIndex, layoutEnvironment in
            let sectionIdentifier = self.dataSource.snapshot().sectionIdentifiers[sectionIndex]
            let itemSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1), heightDimension: .estimated(self.view.height))
            let item = NSCollectionLayoutItem(layoutSize: itemSize)
            let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1), heightDimension: .fractionalHeight(1))
            let group = NSCollectionLayoutGroup.horizontal(layoutSize: groupSize, subitems: [item])
            let section = NSCollectionLayoutSection(group: group)
            
            return section
        }
        
        if let collectionHeader = createHeaderSupplementaryItem() {
            let layoutConfiguration = UICollectionViewCompositionalLayoutConfiguration()
            layoutConfiguration.boundarySupplementaryItems = [collectionHeader]
            layout.configuration = layoutConfiguration
        }

        return layout
    }

使用流布局,我将使用 UIScrollViewDelegate 来获得所需的行为:

    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        guard self.scrollView == scrollView else {
            return
        }

        collectionView.contentOffset.y = scrollView.contentOffset.y
    }

但是在导致混乱的构图布局上。
那么有可能在作曲上实现相同的行为吗?
b.t.w 显然,为了示例,我已经简化了我的代码,我的集合要复杂得多,并且不容易转换为流布局。

【问题讨论】:

    标签: ios swift uicollectionview uikit uicollectionviewcompositionallayout


    【解决方案1】:

    你试过用滚动到项目方法?虽然它会导致布局错误,但有时似乎是目前唯一的解决方案。至少我没有找到更好的方法(

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-23
      • 2013-10-11
      • 1970-01-01
      • 2012-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多