应用快照时如何停止 UICollectionViewDiffableDataSource 滚动集合视图?

问题描述

我有一个用于垂直滚动的 UICollectionViewDiffableDataSource,带有动态高度单元。

每次我在数据源上调用“应用”时,集合视图都会滚动一点,看起来不太好。 如何防止它滚动?

private func applySnapshot(completion: @escaping () -> ()) {
    let sections = presenter.getSections().filter({$0.date != nil} ).map({$0.date!})
    var snapshot = Snapshot()
    snapshot.appendSections(sections)
    sections.forEach { (date) in
        if var events = presenter.getEvents(by: date) {
            if events.isEmpty {
                events = [Event(emptyEventDate: date)]
            }
            snapshot.appendItems(events,toSection: date)
        }
    }
    self.dataSource.apply(snapshot,animatingDifferences: false) {
        completion()
    }
}


private func createLayout() -> UICollectionViewLayout {
    let kHeaderHeight: CGFloat = 25
    let kSectionInsetTop: CGFloat = 8
    let kSectionInsetLeadingTrailing: CGFloat = 15
    let kSectionInsetBottom: CGFloat = 28
    let kItemSpacing: CGFloat = 12

    let estimatedHeight = CGFloat(400)
    let layoutSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0),heightDimension: .estimated(estimatedHeight))
    
    let item = NSCollectionLayoutItem(layoutSize: layoutSize)
    let group = NSCollectionLayoutGroup.horizontal(layoutSize: layoutSize,subitem: item,count: 1)
    group.contentInsets = NSDirectionalEdgeInsets(
        top: 0,leading: kSectionInsetLeadingTrailing,bottom: 0,trailing: kSectionInsetLeadingTrailing)
    let section = NSCollectionLayoutSection(group: group)
    section.contentInsets = NSDirectionalEdgeInsets(
        top: kSectionInsetTop,leading: 0,bottom: kSectionInsetBottom,trailing: 0)

    section.interGroupSpacing = kItemSpacing
    let headerSize = NSCollectionLayoutSize(
        widthDimension: .fractionalWidth(1.0),heightDimension: .absolute(kHeaderHeight)
    )
    let sectionHeader = NSCollectionLayoutBoundarySupplementaryItem(
        layoutSize: headerSize,elementKind: UICollectionView.elementKindSectionHeader,alignment: .top
    )
    
    sectionHeader.pinToVisibleBounds = true
    section.boundarySupplementaryItems = [sectionHeader]
    let layout = UICollectionViewCompositionalLayout(section: section)

    return layout
}

感谢您的帮助??

  • 编辑: 当我在可见单元格之前插入新项目/部分时,我看到视图“跳跃”/滚动了一点。如果我在它没有发生之后插入。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)