From 33494b9f761ea30ecbe84710c1614e1c6ae90a5f Mon Sep 17 00:00:00 2001 From: Justin Mazzocchi <2831158+jzzocc@users.noreply.github.com> Date: Tue, 19 Jan 2021 13:09:12 -0800 Subject: [PATCH] Don't query visible cells on scroll --- View Controllers/TableViewController.swift | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/View Controllers/TableViewController.swift b/View Controllers/TableViewController.swift index 59e6306..10b6843 100644 --- a/View Controllers/TableViewController.swift +++ b/View Controllers/TableViewController.swift @@ -17,6 +17,7 @@ class TableViewController: UITableViewController { private let loadingTableFooterView = LoadingTableFooterView() private let webfingerIndicatorView = WebfingerIndicatorView() @Published private var loading = false + private var visibleLoadMoreViews = Set() private var cancellables = Set() private var cellHeightCaches = [CGFloat: [CollectionItem: CGFloat]]() private var shouldKeepPlayingVideoAfterDismissal = false @@ -105,6 +106,18 @@ class TableViewController: UITableViewController { : viewModel.nextPageMaxId { viewModel.request(maxId: maxId, minId: nil) } + + if let loadMoreView = cell.contentView as? LoadMoreView { + visibleLoadMoreViews.insert(loadMoreView) + } + } + + override func tableView(_ tableView: UITableView, + didEndDisplaying cell: UITableViewCell, + forRowAt indexPath: IndexPath) { + if let loadMoreView = cell.contentView as? LoadMoreView { + visibleLoadMoreViews.remove(loadMoreView) + } } override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat { @@ -220,10 +233,6 @@ private extension TableViewController { static let bottomInset: CGFloat = .newStatusButtonDimension + .defaultSpacing * 4 static let loadingFooterDebounceInterval: TimeInterval = 0.5 - var visibleLoadMoreViews: [LoadMoreView] { - tableView.visibleCells.compactMap { $0.contentView as? LoadMoreView } - } - func setupViewModelBindings() { viewModel.title.sink { [weak self] in self?.navigationItem.title = $0 }.store(in: &cancellables)