我的应用是iPad风景,使用自动布局。
初始视图的表视图只占屏幕的一半(另一半是MapKit视图)。
包含该表(以及地图视图)的视图控制器是应用程序根导航控制器的顶视图控制器。
在视图加载时,我实例化UISearchController
并将其搜索栏添加到表格视图的标题视图中,这是标准过程。
如果点击搜索栏并输入一些文字,则会显示结果。如果我在这里取消搜索,没问题。
如果相反,我选择其中一个结果行,然后进入下一个屏幕,然后弹回,搜索栏就消失了。我可以通过再次呼叫恢复它:
self.tableView.headerView = self.searchController.searchBar
在viewDidAppear()中,但这只有在我点按搜索栏“取消”之后才有效按钮(此时,它会再次消失 - 在示波器按钮折叠动画结束后立即)。
我见过很多类似的问题,但没有一个描述我的确切症状,没有解决方案(或者我能想到的任何其他问题):
// In viewDidLoad():
self.definesPresentationContext = true
self.searchController.definesPresentationContext = true
self.extendedLayoutIncludesOpaqueBars = true
self.navigationController?.extendedLayoutIncludesOpaqueBars = true
self.navigationController?.navigationBar.translucent = true
......似乎在我的情况下有用。
最奇怪的部分是,我有其他类似的表格视图与搜索界面(在模态视图控制器中显示),没有区别我可以发现配置,这些工作正常......
我知道我一定错过了什么......
答案 0 :(得分:1)
我有类似的问题。有时,点按“取消”按钮时,搜索栏也会消失。我发现如果搜索栏再次重置为表头,这可能会导致搜索栏消失。因此,我有以下更新的代码来解决此问题。
func setupSearchController(_ ctr: UISearchController?) {
if let sc = car { // search bar is not nil
if #available(iOS 11.0, *) {
navigationItem.searchController = sc
} else {
// Fallback on earlier versions
if tableView.tableHeaderView == nil {
tableView.tableHeaderView = sc.searchBar
}
}
} else {
if #available(iOS 11.0, *) {
navigationItem.searchController = nil
} else {
// Fallback on earlier versions
tableView.tableHeaderView = nil
}
}
}
注意:对于iOS 11或更高版本,搜索栏设置为导航项。
答案 1 :(得分:0)
经过几个小时的尝试后,我发现了有问题的代码:
func searchBarTextDidEndEditing(searchBar: UISearchBar)
{
// Dismiss the keyboard
self.resultSearchController.resignFirstResponder()
// Reload of table data
self.resultSearchController.loadView()
}
在将这两行评论出来之后 - 或者更好,整个方法(因为我没有在其中做任何其他事情) - 问题自行解决。
注意:我的一个同事在尝试不同的事情时实现了这种方法,以使搜索按预期工作,并且它以某种方式卡住......