From c6d644feaf89327b092dad0ef1f001da27c75bb3 Mon Sep 17 00:00:00 2001 From: Justin Mazzocchi <2831158+jzzocc@users.noreply.github.com> Date: Mon, 1 Feb 2021 15:10:37 -0800 Subject: [PATCH] Adjust loading footer display interval behavior --- View Controllers/TableViewController.swift | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/View Controllers/TableViewController.swift b/View Controllers/TableViewController.swift index 04464c8..76b86df 100644 --- a/View Controllers/TableViewController.swift +++ b/View Controllers/TableViewController.swift @@ -251,7 +251,7 @@ extension TableViewController: ZoomAnimatorDelegate { private extension TableViewController { static let bottomInset: CGFloat = .newStatusButtonDimension + .defaultSpacing * 4 - static let loadingFooterDebounceInterval: TimeInterval = 0.5 + static let loadingFooterDebounceInterval: TimeInterval = 0.75 var bottomInset: CGFloat { insetBottom ? Self.bottomInset : 0 } @@ -279,19 +279,21 @@ private extension TableViewController { viewModel.loading.receive(on: DispatchQueue.main).assign(to: &$loading) + $loading.combineLatest( $loading.debounce( for: .seconds(Self.loadingFooterDebounceInterval), - scheduler: DispatchQueue.main) - .sink { [weak self] in + scheduler: DispatchQueue.main)) + .sink { [weak self] loading, debouncedLoading in guard let self = self else { return } let refreshControlVisibile = self.refreshControl?.isRefreshing ?? false - if !$0, refreshControlVisibile { + if !loading, refreshControlVisibile { self.refreshControl?.endRefreshing() } - self.tableView.tableFooterView = $0 && !refreshControlVisibile ? self.loadingTableFooterView : UIView() + self.tableView.tableFooterView = + loading && debouncedLoading && !refreshControlVisibile ? self.loadingTableFooterView : UIView() self.sizeTableHeaderFooterViews() } .store(in: &cancellables)