UITableViewDiffableDataSource не использует повторно ячейки при первом применении после первоначального снимка. После первого применения он работает так, как ожидалось, со второго раза.
SwiftUI View внутри UITableViewCell onDisappear Не запускает первые изменения снимка после первоначального снимка. После этого onDispear вызывает, как и ожидалось.
С обычным UITableView он работает нормально.
Вызывает проблему — из-за этого проигрыватель и ячейки сильно сохраняют память.
Пример кода для воспроизведения с использованием diffable (DiffableTableViewExampleViewController) и нормальной работы без diffable (RegularTableViewExampleViewController)
Код: Выделить всё
func appendNewItems() {
var snapshot = dataSource.snapshot()
snapshot.deleteItems(featuredItems.map { $0.id })
self.featuredItems = [
FeaturedItem(id: UUID(), title: "Featured Item 1", subtitle: "Subtitle 1")
].shuffled()
snapshot.appendItems(featuredItems.map { $0.id })
dataSource.apply(snapshot, animatingDifferences: true)
}
private func configureDataSource() {
dataSource = UITableViewDiffableDataSource(
tableView: tableView
) { tableView, indexPath, itemIdentifier in
if let featuredItem = self.featuredItems.first(where: { $0.id == itemIdentifier }) {
let cell =
tableView.dequeueReusableCell(withIdentifier: "FeaturedCell", for: indexPath)
as! FeaturedCell
cell.configure(with: featuredItem)
return cell
} else if let regularItem = self.regularItems.first(where: { $0.id == itemIdentifier }) {
let cell =
tableView.dequeueReusableCell(withIdentifier: "RegularCell", for: indexPath)
as! RegularCell
cell.configure(with: regularItem)
return cell
}
return UITableViewCell()
}
}
private func applyInitialSnapshot() {
var snapshot = NSDiffableDataSourceSnapshot()
featuredItems = [
FeaturedItem(id: UUID(), title: "Featured Item 1", subtitle: "Subtitle 1"),
]
snapshot.appendSections([.featured, .regular])
snapshot.appendItems(featuredItems.map { $0.id }, toSection: .featured)
dataSource.apply(snapshot, animatingDifferences: true)
}
}
Заранее спасибо!
Подробнее здесь: https://stackoverflow.com/questions/793 ... r-the-firs