首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可分选快照重装段头

可分选快照重装段头
EN

Stack Overflow用户
提问于 2019-12-10 09:57:00
回答 2查看 2K关注 0票数 4

使用NSDiffableDataSourceSnapshot重新加载表视图数据时,表视图将只重新加载包含与上一次快照不同的部分。

我有一个表视图,其中包含带有特定日期的条目。根据用户在段控件中选择的内容,按条目周/月/自定义日期范围的节对条目进行排序。

当我有一个星期区段,而且这个星期是这个月唯一存在的星期时,当用户选择不同的日期范围和标题将保持不变时,该节将不会更新。

无论此快照与上一次快照之间是否存在差异,如何重新加载所有区段标题?

下面是设置快照的代码:

代码语言:javascript
复制
struct EntriesSection {

    let date: Date
    var entries: [Entry] = []
}

var sections: [EntriesSection]()

private func setupSnapshot() {

    snapshot = NSDiffableDataSourceSnapshot<Date, Entry>()

    sections.forEach {
        snapshot.appendSections([$0.date])
        snapshot.appendItems($0.entries, toSection: $0.date)
    }

    dataSource?.apply(snapshot, animatingDifferences: true)
}

结果:

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-30 09:48:30

问题是第一节的标题没有改变。

该部分为Date - NSDiffableDataSourceSnapshot<Date, Entry>()类型,周和月开始日期都在同一天,即2019年12月1日。

因此,就快照而言,每周和一个月的日期都是相同的。

为了解决这个问题,我创建了一个日期范围为:

代码语言:javascript
复制
struct DateRange: Hashable {
  let from: Date
  let to: Date
}

然后将快照部分类型从Date更改为DateRange

NSDiffableDataSourceSnapshot<DateRange, Entry>()

现在,如果开始日期相同且结束日期更改,快照将知道他需要更新标头。

票数 3
EN

Stack Overflow用户

发布于 2020-11-06 15:53:03

这也适用于:

代码语言:javascript
复制
var updatedSnapshot = dataSource.snapshot()
updatedSnapshot.reloadSections([.main])
self.dataSource.apply(updatedSnapshot, animatingDifferences: true)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59264528

复制
相关文章

相似问题

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