From 8114b7d2acc91c491d274d34055bc80ed1165973 Mon Sep 17 00:00:00 2001 From: Jed Fox Date: Thu, 3 Nov 2022 09:24:30 -0400 Subject: [PATCH] Add support for scrolling the discovery tab to the top/first tab --- Mastodon/Protocol/ScrollViewContainer.swift | 8 +++++++- Mastodon/Scene/Discovery/DiscoveryViewController.swift | 7 +++++++ .../Scene/Search/Search/SearchViewController.swift | 10 ++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/Mastodon/Protocol/ScrollViewContainer.swift b/Mastodon/Protocol/ScrollViewContainer.swift index ae79d0e0f..8e3fda06e 100644 --- a/Mastodon/Protocol/ScrollViewContainer.swift +++ b/Mastodon/Protocol/ScrollViewContainer.swift @@ -14,6 +14,12 @@ protocol ScrollViewContainer: UIViewController { extension ScrollViewContainer { func scrollToTop(animated: Bool) { - scrollView.scrollRectToVisible(CGRect(origin: .zero, size: CGSize(width: 1, height: 1)), animated: animated) + scrollView.scrollToTop(animated: animated) + } +} + +extension UIScrollView { + func scrollToTop(animated: Bool) { + scrollRectToVisible(CGRect(origin: .zero, size: CGSize(width: 1, height: 1)), animated: animated) } } diff --git a/Mastodon/Scene/Discovery/DiscoveryViewController.swift b/Mastodon/Scene/Discovery/DiscoveryViewController.swift index 33bbefaef..969ba5534 100644 --- a/Mastodon/Scene/Discovery/DiscoveryViewController.swift +++ b/Mastodon/Scene/Discovery/DiscoveryViewController.swift @@ -131,6 +131,13 @@ extension DiscoveryViewController: ScrollViewContainer { var scrollView: UIScrollView { return (currentViewController as? ScrollViewContainer)?.scrollView ?? UIScrollView() } + func scrollToTop(animated: Bool) { + if scrollView.contentOffset.y <= 0 { + scrollToPage(.first, animated: animated) + } else { + scrollView.scrollToTop(animated: animated) + } + } } extension DiscoveryViewController { diff --git a/Mastodon/Scene/Search/Search/SearchViewController.swift b/Mastodon/Scene/Search/Search/SearchViewController.swift index b5259dcc4..7efef2c00 100644 --- a/Mastodon/Scene/Search/Search/SearchViewController.swift +++ b/Mastodon/Scene/Search/Search/SearchViewController.swift @@ -190,6 +190,16 @@ extension SearchViewController: UISearchControllerDelegate { } } +// MARK: - ScrollViewContainer +extension SearchViewController: ScrollViewContainer { + var scrollView: UIScrollView { + discoveryViewController?.scrollView ?? UIScrollView() + } + func scrollToTop(animated: Bool) { + discoveryViewController?.scrollToTop(animated: animated) + } +} + // MARK: - UICollectionViewDelegate //extension SearchViewController: UICollectionViewDelegate { // func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {