【发布时间】:2016-04-29 17:11:33
【问题描述】:
我已经实现了UISearchController,以便在点击搜索图标时它出现在UINavigationBar 之上。过滤表格后,用户应该能够选择将推送新视图控制器的行。问题在于这样做时,搜索控制器仍显示在导航栏上方。
我对此进行了研究,建议您将self.definedPresentationContext 设置为true。当搜索栏显示在导航栏上方时,这不起作用。当您点击搜索图标时,键盘会出现,但搜索栏没有动画。
我发现的另一个选项是通过将active 设置为false 来关闭viewWillDisappear 中的搜索控制器。这个解决方案的问题是它在推送过渡期间动画消失了。当您返回时,搜索显然不再有效,因此用户丢失了搜索上下文并显示了所有结果。
我想知道如何推送视图控制器,保持搜索处于活动状态,但不显示下一个视图控制器上方的搜索界面。理想情况下,搜索界面会在新的视图控制器被推送时被推向左侧,并在滑回搜索结果时返回。
我已经调整了 Apple 的 UIKit 目录示例代码以显示不受欢迎的行为。要重现该问题,download this project,在 iPhone 上运行它,点击返回按钮,选择搜索,选择在导航栏上显示,点击搜索图标,输入搜索词,然后选择一个结果。请注意,搜索栏仍然可见。这是来自SearchPresentOverNavigationBarViewController.swift的代码:
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
if searchController.active {
//searchController.active = false //undesirably dismisses search, animates away during push, upon going back search is not active
}
}
@IBAction func searchButtonClicked(button: UIBarButtonItem) {
//self.definesPresentationContext = true //causes the search to not appear
searchController = UISearchController(searchResultsController: nil)
searchController.searchResultsUpdater = self
searchController.dimsBackgroundDuringPresentation = false
searchController.hidesNavigationBarDuringPresentation = false
presentViewController(searchController, animated: true, completion: nil)
}
【问题讨论】:
标签: ios uinavigationbar uisearchcontroller