Sam*_*Sam 5 iphone uitableview ios swift nsdiffabledatasourcesnapshot
当使用 重新加载表视图数据时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)
}
Run Code Online (Sandbox Code Playgroud)
结果:

提前致谢。
问题在于第一部分的标题没有改变。
该部分的类型为Date-NSDiffableDataSourceSnapshot<Date, Entry>()并且周和月的开始日期都在同一天,即Dec 1, 2019。
因此,就快照而言,周和月的日期仍然相同。
为了解决这个问题,我创建了一个日期范围的对象:
struct DateRange: Hashable {
let from: Date
let to: Date
}
Run Code Online (Sandbox Code Playgroud)
然后将快照部分类型从更改Date为DateRange:
NSDiffableDataSourceSnapshot<DateRange, Entry>()
现在,如果开始日期相同而结束日期发生变化,快照就会知道他需要更新标头。
| 归档时间: |
|
| 查看次数: |
2543 次 |
| 最近记录: |