mic*_*sox 4 ios swift diffabledatasource uicollectionviewdiffabledatasource
可以通过哪些方式UICollectionViewDiffableDataSource重新加载标头?
我有一个集合视图,其中的标题显示用户详细信息,行显示帖子,模型是
struct PostUser {
var user: User
var post: Post
}
Run Code Online (Sandbox Code Playgroud)
当我通过快照更改属性时
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)
}
Run Code Online (Sandbox Code Playgroud)
行会重新加载,但补充标题不会重新加载。我可以更改标题的唯一方法是使“部分”成为模型的一部分,因此:
struct Section: Hashable {
var User: User
}
Run Code Online (Sandbox Code Playgroud)
我的应用快照现在变成
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)
}
Run Code Online (Sandbox Code Playgroud)
然后我单独设置用户
var user: User! = nil {
didSet {
self.applySnapshot(self.postUsers)
}
}
Run Code Online (Sandbox Code Playgroud)
并且标题重新加载。
我不太明白为什么当我更改 postUsers 中的某些内容时,行会重新加载,但标题不会重新加载 - 直到我将模型实现为该部分的一部分?
我确实了解 diffable 适用于散列,因此当我更改属性时,表会重新加载,但感觉标头也应该重新加载,但它是单独处理的?
仅当检测到该部分本身发生更改时才会重新加载标头。如果仅项目发生变化,补充意见将保持不变。根据您的情况,您可以考虑的另一件事是设置animatingDifferences为false当您想要重新加载标头时,因为从最新的 iOS 14 beta 开始,这将触发reloadData. 不会进行任何比较。
| 归档时间: |
|
| 查看次数: |
2579 次 |
| 最近记录: |