Swift-搜索后隐藏导航栏

时间:2020-01-29 21:40:25

标签: swift uitableview uinavigationcontroller uinavigationbar uisearchcontroller

首先,如果这是重复的内容,则表示歉意 Hide navigation bar after using search bar

上面的问题是针对Objective-C的,没有可行的解决方案,并且已经停用了几年,所以我认为这个问题值得一个新的问题。

我面临的问题是,仅当演示时搜索控制器未处于活动状态时,详细视图控制器中的导航栏才隐藏。如果我从过滤后的表格中显示Detail VC,则在视图顶部会出现一个半透明的导航栏。


class PlaylistViewController: UIViewController {

    var playlists: [Playlist] = [standardPlaylist]
    var filteredPlaylists: [Playlist] = []

    let searchController = UISearchController(searchResultsController: nil)

    var isSearchBarEmpty: Bool {
        searchController.searchBar.text?.isEmpty ?? true
    }

    var isFiltering: Bool {
        return searchController.isActive && !isSearchBarEmpty
    }


    @IBOutlet weak var PlaylistTableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()

        self.navigationController?.setNavigationBarHidden(false, animated: true)
        self.navigationController?.navigationBar.prefersLargeTitles = true

        PlaylistTableView.delegate = self
        PlaylistTableView.dataSource = self

        //search bar setup
        searchController.searchResultsUpdater = self
        searchController.obscuresBackgroundDuringPresentation = false
        searchController.searchBar.placeholder = "Search Playlists"
        searchController.searchBar.sizeToFit()

        navigationItem.searchController = searchController
        definesPresentationContext = true

//When table view row is selected
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        //instantiate a DetailVC
        //other logic
        DispatchQueue.main.async {
            self.navigationController?.setViewControllers([detailVC], animated: true)
            //I have tried hiding the Nav Bar here but the problem persists
        }
    }
}

extension PlaylistViewController: UISearchResultsUpdating {

    func updateSearchResults(for searchController: UISearchController) {
        let searchBar = searchController.searchBar
        filterPlaylists(searchBar.text!)
    }

}

class DetailVC: UIViewController {
    override func viewWillAppear(_ animated: Bool) {
        navigationController?.setNavigationBarHidden(true, animated: false)
    }

0 个答案:

没有答案