bounty将在1分钟后过期。回答此问题可获得+50的声望奖励。Abhinav Jha正在寻找来自知名来源的答案。
我有5个不同的部分,其中3个是在初始调用期间加载的,其余2个是在滚动(分页)期间加载的。如果我事先创建UICollectionViewCompositionalLayout,则数据将按照创建NSCollectionLayoutSection的顺序加载,这将导致我的数据加载到不同的部分,如果我在分页期间再次创建UICollectionViewCompositionalLayout,则集合视图将 Flink 。
func createHomeLayout(for collectionView: UICollectionView, sections: [SectionType]) -> UICollectionViewLayout {
let layout = UICollectionViewCompositionalLayout { (sectionIndex: Int,
layoutEnvironment: NSCollectionLayoutEnvironment) -> NSCollectionLayoutSection? in
guard sectionIndex < sections.count else { return nil }
let section = sections[sectionIndex]
switch section {
case .ba:
return BaSectionCreator.create(for: collectionView.frame)
case .br:
return BrSectionCreator.create()
case .ca:
return CaSectionCreator.create()
case .pr:
return PrSectionCreator.create()
case .re:
return ReSectionCreator.create()
}
}
return layout
}
1条答案
按热度按时间ghhaqwfi1#
您可以通过在初始调用加载前3个数据部分之前只创建一次UICollectionViewCompositionalLayout来避免集合视图 Flink 。然后,您可以使用UICollectionView的performBatchUpdates方法将新的数据部分插入到现有布局中。这将允许您插入新的数据部分,而无需重新创建整个布局,这将避免集合视图 Flink 。
下面是一个如何执行此操作的示例:
此方法可让您避免在后续分页呼叫时重新建立配置,这应该会避免集合检视 Flink 。请注意,您将需要更新createHomeLayout方法,以传回每一个区段类型的正确NSCollectionLayoutSection,包括在后续分页呼叫时加入的.pr和.re区段类型。