在 iOS 11 之前的导航项下方搜索控制器
Search controller below navigation item prior to iOS 11
我使用这段代码没问题,但我想将搜索控制器放在导航项 titleView
的下方,而不是替换它。使用 iOS11 就像将 navigationItem.searchController
设置为 searchController
一样简单,它将把它放在 titleView
下面,但在 navigationItem
.[=18= 中]
关于如何在 iOS 11 之前执行此操作的任何想法,而不是替换 titleView
?
当前代码:
if #available(iOS 11, *) {
navigationItem.searchController = searchController
navigationItem.hidesSearchBarWhenScrolling = false
} else {
navigationItem.titleView = searchController.searchBar
}
我不知道它是否仍然与你相关,但对于任何搜索答案并在此处结束的人来说,这是一种方法:
if #available(iOS 11.0, *) {
navigationItem.searchController = searchController
} else {
tableView.tableHeaderView = searchController.searchBar
}
@holger 的回答帮助我解决了 iOS 10 中的问题 - 它在按取消时不小心隐藏了整个导航栏。
由于我的应用程序在导航栏的标题处有一个徽标,因此搜索栏在不使用时必须隐藏。所以我添加了一个搜索按钮 rightBarButtonItem
,并在按下时触发@holger 的代码。
@IBAction func onSearchAction(_ sender: UIBarButtonItem) {
if #available(iOS 11.0, *) {
navigationItem.searchController = searchController
} else {
// Fallback on earlier versions
searchController.hidesNavigationBarDuringPresentation = false
tableView.tableHeaderView = searchController.searchBar
}
searchController.isActive = true
}
func didPresentSearchController(_ searchController: UISearchController) {
asyncAfter(.milliseconds(300)) {
searchController.searchBar.becomeFirstResponder()
}
}
参考另一个答案here,我在didPresentSearchController
里面添加了becomeFirstResponder()
,稍有延迟。因此键盘将在不点击的情况下出现。最后,实现 UISearchControllerDelegate
以便它在取消时消失:
func willDismissSearchController(_ searchController: UISearchController) {
if #available(iOS 11.0, *) {
navigationItem.searchController = nil
} else {
// Fallback on earlier versions
tableView.tableHeaderView = nil
}
}
我使用这段代码没问题,但我想将搜索控制器放在导航项 titleView
的下方,而不是替换它。使用 iOS11 就像将 navigationItem.searchController
设置为 searchController
一样简单,它将把它放在 titleView
下面,但在 navigationItem
.[=18= 中]
关于如何在 iOS 11 之前执行此操作的任何想法,而不是替换 titleView
?
当前代码:
if #available(iOS 11, *) {
navigationItem.searchController = searchController
navigationItem.hidesSearchBarWhenScrolling = false
} else {
navigationItem.titleView = searchController.searchBar
}
我不知道它是否仍然与你相关,但对于任何搜索答案并在此处结束的人来说,这是一种方法:
if #available(iOS 11.0, *) {
navigationItem.searchController = searchController
} else {
tableView.tableHeaderView = searchController.searchBar
}
@holger 的回答帮助我解决了 iOS 10 中的问题 - 它在按取消时不小心隐藏了整个导航栏。
由于我的应用程序在导航栏的标题处有一个徽标,因此搜索栏在不使用时必须隐藏。所以我添加了一个搜索按钮 rightBarButtonItem
,并在按下时触发@holger 的代码。
@IBAction func onSearchAction(_ sender: UIBarButtonItem) {
if #available(iOS 11.0, *) {
navigationItem.searchController = searchController
} else {
// Fallback on earlier versions
searchController.hidesNavigationBarDuringPresentation = false
tableView.tableHeaderView = searchController.searchBar
}
searchController.isActive = true
}
func didPresentSearchController(_ searchController: UISearchController) {
asyncAfter(.milliseconds(300)) {
searchController.searchBar.becomeFirstResponder()
}
}
参考另一个答案here,我在didPresentSearchController
里面添加了becomeFirstResponder()
,稍有延迟。因此键盘将在不点击的情况下出现。最后,实现 UISearchControllerDelegate
以便它在取消时消失:
func willDismissSearchController(_ searchController: UISearchController) {
if #available(iOS 11.0, *) {
navigationItem.searchController = nil
} else {
// Fallback on earlier versions
tableView.tableHeaderView = nil
}
}