gpt4 book ai didi

ios - 可区分数据源 - 重新加载 header

转载 作者:行者123 更新时间:2023-12-05 03:49:42 25 4
gpt4 key购买 nike

可以通过哪些方式重新加载 UICollectionViewDiffableDataSource header ?

我有一个 Collection View ,带有显示用户详细信息的标题和显示帖子的行,模型是

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 对哈希起作用,所以当我更改属性时,表会重新加载,但感觉标题也应该重新加载,但它是分开处理的吗?

最佳答案

标题仅在检测到节本身发生变化时才重新加载。如果只有项目发生变化,补充意见将保持不变。根据您的情况,您可以考虑的另一件事是在您想要重新加载 header 时将 animatingDifferences 设置为 false,因为从最新的 iOS 14 beta 开始,这将触发 reloadData。不会进行差异化。

关于ios - 可区分数据源 - 重新加载 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63790019/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com