【发布时间】:2015-11-10 10:19:27
【问题描述】:
我的应用是 iPad 横向,使用自动布局。
初始视图有一个只占屏幕一半的表格视图(另一半是 MapKit 视图)。
包含该表(和地图视图)的视图控制器是应用根导航控制器的顶部视图控制器。
在视图加载时,我实例化 UISearchController 并将其搜索栏添加到表视图的标题视图中,这是标准过程。
如果我点击搜索栏并输入一些文本,则会显示结果。如果我在这里取消搜索,没问题。
如果相反,我选择其中一个结果行,然后推入下一个屏幕,然后弹回来,搜索栏就消失了。我可以通过再次调用来恢复它:
self.tableView.headerView = self.searchController.searchBar
在 viewDidAppear() 中,但这仅在我点击搜索栏的“取消”按钮之前有效(此时,它会再次消失 - 范围按钮折叠动画结束后)。 p>
我见过很多类似的问题,但没有一个能描述我的确切症状,也没有一个解决方案(或任何我能想到的):
// In viewDidLoad():
self.definesPresentationContext = true
self.searchController.definesPresentationContext = true
self.extendedLayoutIncludesOpaqueBars = true
self.navigationController?.extendedLayoutIncludesOpaqueBars = true
self.navigationController?.navigationBar.translucent = true
...似乎对我有用。
最奇怪的是,我还有其他类似的带有搜索界面的表格视图(在模态视图控制器中显示),在配置方面我看不出有什么区别,而且这些工作正常...
我知道我一定错过了什么......
【问题讨论】:
-
我不确定,但我在制作自己的控制器时看到了类似的东西。尝试使用
presentationContext。 -
你的意思是
definesPresentationContex?我试过true和false。 False 导致搜索栏即使在导航到下一个视图控制器(push segue)后仍保留在屏幕上。 -
是的,你是对的。正是我在控制器中看到的这个问题。从子控制器返回后,您可以检查
navigationBar.translucent的值吗?也许子控制器设置了一个值navigationBar.translucent到false?
标签: ios uitableview uisearchbar uisearchcontroller