我研究了这个,有人建议你应该将self.definedPresentationContext设置为true.当搜索栏显示在导航栏上方时,这不起作用.当您点击搜索图标时,键盘会出现,但搜索栏不会显示动画.
我找到的另一个选项是通过将active设置为false来关闭viewWillDisappear中的搜索控制器.这个解决方案的问题是它在推送过渡期间会动画化.当您向后导航时,搜索显然不再处于活动状态,因此用户已丢失搜索上下文并显示所有结果.
我想知道如何推送视图控制器,保持搜索活动,但不显示搜索界面超过下一个视图控制器.理想情况下,当推送新视图控制器时,搜索界面将被推离到左侧,并在刷回到搜索结果时返回.
我调整了Apple的UIKit Catalog示例代码,以显示不良行为.要重现问题,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) }
解决方法
因此,假设您已经展示了搜索界面,用户在搜索字段中输入了一些内容,并向您展示了一些结果.在选择结果后,我将新视图控制器推送到原始导航控制器,即包含呈现搜索界面的视图控制器的导航控制器.当我这样做时,搜索界面被推到左侧,当你点击后退按钮时,搜索界面被带回来并保留其状态(查询和结果).
我应该提一下,在包含可搜索内容的控制器中,提供搜索界面的内容,我启用了演示文稿上下文.
此外,我的搜索栏集成在显示搜索内容的表格视图的标题视图中,因此我没有明确显示搜索界面 – 当用户点击搜索字段时,它会自动上升并推送导航栏离开屏幕.这是我能想到的唯一不同的设置.无论如何,希望这对你有所帮助.干杯!