我一直在玩新的iOS 13不同的数据源,并发现它们非常容易和直接使用。
不过,我对一件事不太确定。是否建议使用不同数据源的快照属性(例如在UITableViewDelegate中)来获得区段高度?
这是我最初的方法
func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
let section = dataSource.snapshot().sectionIdentifiers[section]
return section.footerHeight
}dataSource是我的可扩展数据源属性,而footerHeight是my中的一个计算属性,由可扩展数据源使用。
我看过一些教程,它们创建了对最新快照的引用。
var currentSnapshot: NSDiffableDataSourceSnapshot?并在每次应用新快照时更新表数据源。所以我的原始代码现在可能是这样的
func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
let section = currentSnapshot?.sectionIdentifiers[section]
return section?.footerHeight ?? 0
}从苹果文档判断,每次都会创建数据源的snapshot()方法,因此我觉得我的第一种方法对于每个部分来说都不是很有效,甚至可能会创建一个新的快照副本。
方法2是更好的方法吗?或者创建快照非常有效,因此方法1很好?
发布于 2020-01-07 12:17:52
在实践中,这两种方式是相同的。在调用apply之后,分别创建一次快照
https://stackoverflow.com/questions/57859564
复制相似问题