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.searchBar as tableHeaderView 下拉时导致 UITableView 顶部出现空白 UIView