差异快照重新加载部分 header
Diffable Snapshot reload section header
使用 NSDiffableDataSourceSnapshot
重新加载 table 视图数据时,table 视图将仅重新加载包含与先前快照不同的部分。
我有一个 table 视图,其中包含具有特定日期的条目。根据用户在段控件中选择的内容,条目按条目 week/month/custom 日期范围内的部分排序。
当我有一个星期部分并且本周是本月唯一存在的一周时,当用户选择不同的日期范围时该部分将不会更新并且 header 将保持不变。
我怎样才能重新加载所有 header 部分,而不管这个快照与之前的快照之间是否存在差异?
这里是设置快照的代码:
struct EntriesSection {
let date: Date
var entries: [Entry] = []
}
var sections: [EntriesSection]()
private func setupSnapshot() {
snapshot = NSDiffableDataSourceSnapshot<Date, Entry>()
sections.forEach {
snapshot.appendSections([[=11=].date])
snapshot.appendItems([=11=].entries, toSection: [=11=].date)
}
dataSource?.apply(snapshot, animatingDifferences: true)
}
结果:
提前致谢。
问题出在第一部分的标题上,该标题未更改。
该部分的类型为 Date
- NSDiffableDataSourceSnapshot<Date, Entry>()
,周和月的开始日期都在同一天,即 2019 年 12 月 1 日.
就快照而言,周和月的日期仍然相同。
为了解决它,我创建了一个 object 这是一个日期范围:
struct DateRange: Hashable {
let from: Date
let to: Date
}
然后将快照部分类型从 Date
更改为 DateRange
:
NSDiffableDataSourceSnapshot<DateRange, Entry>()
现在,如果开始日期相同而结束日期发生变化,快照将知道他需要更新 header。
这也适用:
var updatedSnapshot = dataSource.snapshot()
updatedSnapshot.reloadSections([.main])
self.dataSource.apply(updatedSnapshot, animatingDifferences: true)
使用 NSDiffableDataSourceSnapshot
重新加载 table 视图数据时,table 视图将仅重新加载包含与先前快照不同的部分。
我有一个 table 视图,其中包含具有特定日期的条目。根据用户在段控件中选择的内容,条目按条目 week/month/custom 日期范围内的部分排序。
当我有一个星期部分并且本周是本月唯一存在的一周时,当用户选择不同的日期范围时该部分将不会更新并且 header 将保持不变。
我怎样才能重新加载所有 header 部分,而不管这个快照与之前的快照之间是否存在差异?
这里是设置快照的代码:
struct EntriesSection {
let date: Date
var entries: [Entry] = []
}
var sections: [EntriesSection]()
private func setupSnapshot() {
snapshot = NSDiffableDataSourceSnapshot<Date, Entry>()
sections.forEach {
snapshot.appendSections([[=11=].date])
snapshot.appendItems([=11=].entries, toSection: [=11=].date)
}
dataSource?.apply(snapshot, animatingDifferences: true)
}
结果:
提前致谢。
问题出在第一部分的标题上,该标题未更改。
该部分的类型为 Date
- NSDiffableDataSourceSnapshot<Date, Entry>()
,周和月的开始日期都在同一天,即 2019 年 12 月 1 日.
就快照而言,周和月的日期仍然相同。
为了解决它,我创建了一个 object 这是一个日期范围:
struct DateRange: Hashable {
let from: Date
let to: Date
}
然后将快照部分类型从 Date
更改为 DateRange
:
NSDiffableDataSourceSnapshot<DateRange, Entry>()
现在,如果开始日期相同而结束日期发生变化,快照将知道他需要更新 header。
这也适用:
var updatedSnapshot = dataSource.snapshot()
updatedSnapshot.reloadSections([.main])
self.dataSource.apply(updatedSnapshot, animatingDifferences: true)