重新加载UICollectionViewDiffableDataSource报头的方式有哪些?
我有一个集合视图,其标题显示用户详细信息,行显示帖子,模型为
struct PostUser {
var user: User
var post: Post
}当我通过快照更改属性时
var postUsers = [PostUser]() {
didSet {
self.applySnapshot(postUsers)
}
}
fileprivate func applySnapshot(_ postsUser: [PostUser]) {
var snapshot = NSDiffableDataSourceSnapshot<Section, PostUser>()
snapshot.appendSections([.main])
snapshot.appendItems(postsUser)
self.datasource.apply(snapshot, animatingDifferences: true)
}行将重新加载,但补充标题不会。改变头部的唯一方法是让Section成为模型的一部分,所以:
struct Section: Hashable {
var User: User
}我的应用快照现在变为
fileprivate func applySnapshot(_ postsUser: [PostUser]) {
var snapshot = NSDiffableDataSourceSnapshot<Section, PostUser>()
snapshot.appendSections([Section(User: self.user)])
snapshot.appendItems(postsUser)
self.datasource.apply(snapshot, animatingDifferences: true)
}然后,我单独设置用户
var user: User! = nil {
didSet {
self.applySnapshot(self.postUsers)
}
}并重新加载报头。
我不太明白为什么当我在postUsers中更改了一些东西时,行会重新加载,但是头却不会--直到我实现了一个模型作为节的一部分?
我确实理解diffable在哈希上工作,所以当我改变一个属性时,表会重新加载,但感觉头也应该重新加载,但它是单独处理的吗?
发布于 2020-09-08 16:35:50
只有在检测到节本身的更改时,才会重新加载头。如果只有项目发生变化,补充视图将保持不变。另一件你可以根据你的情况考虑的事情是,当你想要重新加载头文件时,将animatingDifferences设置为false,因为从最新的iOS 14测试版开始,这将触发reloadData。不会进行任何差异化。
https://stackoverflow.com/questions/63790019
复制相似问题