UISearchController 出现在 NavigationBar 后面

Posted

技术标签:

【中文标题】UISearchController 出现在 NavigationBar 后面【英文标题】:UISearchController appears behind NavigationBar 【发布时间】:2020-01-26 11:02:24 【问题描述】:

我试图通过点击 UIBarButtonItem 来显示 UISearchController。但是 SearchBar 出现在 NavigationBar 后面。如果我设置definePresentationContext = false,那么SearchBar 会出现在NavigationBar 上方,但过渡不起作用。

    @IBAction func searchButtonPressed(_ sender: Any) 
        searchResultsController = self.storyboard?.instantiateViewController(withIdentifier: "SearchResultsController") as? SearchResultsController
        searchResultsController.tableView.delegate = self
        let searchController = UISearchController(searchResultsController: searchResultsController)
        searchController.searchResultsUpdater = searchResultsController
        searchController.hidesNavigationBarDuringPresentation = false
        searchController.searchBar.autocapitalizationType = .words
        definesPresentationContext = true
        present(searchController, animated: true)
    

Before BarButtonItem tapped

After BarButtonItem tapped

View UI Hierarchy

Interface Builder

searchController.hidesNavigationBarDuringPresentation = false解决了这个问题,但是我需要导航栏不被隐藏

更新:

在导航栏中插入 SearchBar 不适合我的应用 https://imgur.com/a/74e5sSk

【问题讨论】:

【参考方案1】:

如果您使用的是UITableViewController,那么您可以执行以下操作:

let searchController = UISearchController(searchResultsController: nil)
searchController.obscuresBackgroundDuringPresentation = false
searchController.definesPresentationContext = true

然后,您需要将这个searchController 分配给navigationItem

self.navigationItem.searchController = searchController

现在searchbar 将在您拉动 tableview 时出现,并且看起来像这样:

如果您想永久保留搜索栏,请执行以下操作:

self.navigationItem.hidesSearchBarWhenScrolling = false

【讨论】:

当按钮像 ios 日历应用一样被点击时,我需要在 viewcontroller 前面显示搜索栏 在我描述的情况下,当您滚动时它也会被隐藏,并且只有在您拉动 tableview 时才会出现。还是您希望它只出现在特定的按钮点击上? 是的,我想在点击按钮时出现 您可以在点击按钮时分配self.navigationItem.searchController = searchController。这样就可以了。 不幸的是,这不适用于我的应用程序imgur.com/a/74e5sSk

以上是关于UISearchController 出现在 NavigationBar 后面的主要内容,如果未能解决你的问题,请参考以下文章

UISearchController 搜索栏在出现时向下移动

标签栏和 UISearchController 出现黑屏

UISearchController.searchBar as tableHeaderView 下拉时导致 UITableView 顶部出现空白 UIView

UISearchController 禁用取消 UIBarButtonItem

使 UISearchController 搜索栏自动激活

iOS13 上的 UISearchController 崩溃