问题描述
我有一个用于垂直滚动的 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 (将#修改为@)