【发布时间】: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