使用NSDiffableDataSourceSnapshot重新加载表视图数据时,表视图将只重新加载包含与上一次快照不同的部分。
我有一个表视图,其中包含带有特定日期的条目。根据用户在段控件中选择的内容,按条目周/月/自定义日期范围的节对条目进行排序。
当我有一个星期区段,而且这个星期是这个月唯一存在的星期时,当用户选择不同的日期范围和标题将保持不变时,该节将不会更新。
无论此快照与上一次快照之间是否存在差异,如何重新加载所有区段标题?
下面是设置快照的代码:
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)
}结果:

提前谢谢。
发布于 2020-01-30 09:48:30
问题是第一节的标题没有改变。
该部分为Date - NSDiffableDataSourceSnapshot<Date, Entry>()类型,周和月开始日期都在同一天,即2019年12月1日。
因此,就快照而言,每周和一个月的日期都是相同的。
为了解决这个问题,我创建了一个日期范围为:
struct DateRange: Hashable {
let from: Date
let to: Date
}然后将快照部分类型从Date更改为DateRange。
NSDiffableDataSourceSnapshot<DateRange, Entry>()
现在,如果开始日期相同且结束日期更改,快照将知道他需要更新标头。
发布于 2020-11-06 15:53:03
这也适用于:
var updatedSnapshot = dataSource.snapshot()
updatedSnapshot.reloadSections([.main])
self.dataSource.apply(updatedSnapshot, animatingDifferences: true)https://stackoverflow.com/questions/59264528
复制相似问题