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 可以用于散列,因此当我更改属性时,表会重新加载,但感觉标题也应该重新加载,但它是单独处理的吗?