首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可区分数据源-重新加载头

可区分数据源-重新加载头
EN

Stack Overflow用户
提问于 2020-09-08 16:27:23
回答 1查看 667关注 0票数 1

重新加载UICollectionViewDiffableDataSource报头的方式有哪些?

我有一个集合视图,其标题显示用户详细信息,行显示帖子,模型为

代码语言:javascript
复制
struct PostUser {
    var user: User
    var post: Post
}

当我通过快照更改属性时

代码语言:javascript
复制
    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成为模型的一部分,所以:

代码语言:javascript
复制
    struct Section: Hashable {
        var User: User
    }

我的应用快照现在变为

代码语言:javascript
复制
    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)
    }

然后,我单独设置用户

代码语言:javascript
复制
    var user: User! = nil {
        didSet {
            self.applySnapshot(self.postUsers)
        }
    }

并重新加载报头。

我不太明白为什么当我在postUsers中更改了一些东西时,行会重新加载,但是头却不会--直到我实现了一个模型作为节的一部分?

我确实理解diffable在哈希上工作,所以当我改变一个属性时,表会重新加载,但感觉头也应该重新加载,但它是单独处理的吗?

EN

回答 1

Stack Overflow用户

发布于 2020-09-08 16:35:50

只有在检测到节本身的更改时,才会重新加载头。如果只有项目发生变化,补充视图将保持不变。另一件你可以根据你的情况考虑的事情是,当你想要重新加载头文件时,将animatingDifferences设置为false,因为从最新的iOS 14测试版开始,这将触发reloadData。不会进行任何差异化。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63790019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档