From c32eda7989cb3ce178631ed6b219e69fdf1b8761 Mon Sep 17 00:00:00 2001 From: Joe Rocca Date: Wed, 11 Oct 2017 13:40:55 -0400 Subject: [PATCH] Added iOS 11 searchController UINavigationItem (#522) * added iOS 11 searchController UINavigationItem, fixes #376 * set iOS 11 UINavigationItem largeTitleDisplayMode to never --- .../Repository/RepositoryViewController.swift | 4 ++ Classes/Search/SearchViewController.swift | 44 +++++++++++++------ 2 files changed, 35 insertions(+), 13 deletions(-) diff --git a/Classes/Repository/RepositoryViewController.swift b/Classes/Repository/RepositoryViewController.swift index 4fe43f78..b2a6330a 100644 --- a/Classes/Repository/RepositoryViewController.swift +++ b/Classes/Repository/RepositoryViewController.swift @@ -62,6 +62,10 @@ NewIssueTableViewControllerDelegate { ) rightItem.accessibilityLabel = NSLocalizedString("More options", comment: "") navigationItem.rightBarButtonItem = rightItem + + if #available(iOS 11, *) { + navigationItem.largeTitleDisplayMode = .never + } } override func viewSafeAreaInsetsDidChange() { diff --git a/Classes/Search/SearchViewController.swift b/Classes/Search/SearchViewController.swift index 164f2112..0a678f8c 100644 --- a/Classes/Search/SearchViewController.swift +++ b/Classes/Search/SearchViewController.swift @@ -32,7 +32,13 @@ SearchResultSectionControllerDelegate { } private var state: State = .idle - private let searchBar = UISearchBar() + private var searchController: UISearchController = { + let searchController = UISearchController(searchResultsController: nil) + searchController.dimsBackgroundDuringPresentation = false + searchController.obscuresBackgroundDuringPresentation = false + return searchController + }() + private lazy var adapter: ListAdapter = { ListAdapter(updater: ListAdapterUpdater(), viewController: self) }() private let collectionView: UICollectionView = { let view = UICollectionView(frame: .zero, collectionViewLayout: UICollectionViewFlowLayout()) @@ -57,12 +63,22 @@ SearchResultSectionControllerDelegate { adapter.collectionView = collectionView adapter.dataSource = self - searchBar.delegate = self - searchBar.placeholder = NSLocalizedString("Search", comment: "") - searchBar.tintColor = Styles.Colors.Blue.medium.color - searchBar.backgroundColor = .clear - searchBar.searchBarStyle = .minimal - navigationItem.titleView = searchBar + searchController.searchBar.delegate = self + searchController.searchBar.placeholder = NSLocalizedString("Search", comment: "") + searchController.searchBar.tintColor = Styles.Colors.Blue.medium.color + searchController.searchBar.backgroundColor = .clear + searchController.searchBar.searchBarStyle = .minimal + if #available(iOS 11.0, *) { + navigationItem.searchController = searchController + navigationItem.hidesSearchBarWhenScrolling = false + navigationItem.title = "Search" + navigationController?.navigationBar.prefersLargeTitles = true + } else { + navigationItem.titleView = searchController.searchBar + searchController.hidesNavigationBarDuringPresentation = false + } + + definesPresentationContext = true } override func viewWillAppear(_ animated: Bool) { @@ -195,15 +211,17 @@ SearchResultSectionControllerDelegate { // MARK: SearchEmptyViewDelegate func didTap(emptyView: SearchEmptyView) { - searchBar.resignFirstResponder() - searchBar.setShowsCancelButton(false, animated: true) + searchController.searchBar.resignFirstResponder() + searchController.searchBar.setShowsCancelButton(false, animated: true) } // MARK: SearchRecentSectionControllerDelegate func didSelect(recentSectionController: SearchRecentSectionController, text: String) { - searchBar.setShowsCancelButton(true, animated: false) - searchBar.text = text + searchController.isActive = true + searchController.searchBar.resignFirstResponder() + searchController.searchBar.setShowsCancelButton(true, animated: false) + searchController.searchBar.text = text search(term: text) } @@ -221,13 +239,13 @@ SearchResultSectionControllerDelegate { } func didDoubleTapTab() { - searchBar.becomeFirstResponder() + searchController.searchBar.becomeFirstResponder() } // MARK: SearchResultSectionControllerDelegate func didSelect(sectionController: SearchResultSectionController) { - searchBar.resignFirstResponder() + searchController.searchBar.resignFirstResponder() } }