从搜索控制器导航后缺少导航栏
Posted
技术标签:
【中文标题】从搜索控制器导航后缺少导航栏【英文标题】:Missing navigation bar after navigating from search controller 【发布时间】:2015-07-07 20:10:14 【问题描述】:以下场景:
我有一个带有导航控制器和表格视图的主视图。转到详细视图。我在导航栏上添加了一个类似于Apple UICatalog 的搜索控制器。我从搜索结果控制器向详细视图添加了另一个 segue。
问题
当我在 normale tableview 中选择一行时,详细视图包含一个导航栏,并且行为符合预期。 当我在结果搜索控制器中执行搜索并选择一行时,显示的详细视图中缺少导航栏。我知道结果视图控制器现在有了导航栏。
问题
我应该怎么做才能从标准导航堆栈中获取导航栏?我尽量避免手动将导航栏添加到详细视图,因为当我来自正常表视图时它正在工作。
更新
我在主表视图中添加了一个额外的转场到搜索表视图。
当我调用搜索时:showViewController(searchController, sender: tableView)
我得到导航栏,但没有搜索输入。使用presentViewController(searchController, animated: true, completion: nil)
,我得到了搜索视图,但导航栏在详细视图中消失了。
【问题讨论】:
【参考方案1】:我正在用另一种方式搜索,将主表视图控制器用作searchResultViewController
。俄语中有一个awesome tutorial(但您可以阅读英文代码)。
它帮助我设置了搜索栏。
不想看就试试
searchController.hidesNavigationBarDuringPresentation = false
在ViewDidLoad
方法中。
【讨论】:
【参考方案2】:如果您按照 segues 进行操作,您会看到导航控制器和搜索控制器之间没有链接。搜索控制器根本不在导航堆栈上,因此在搜索结果时,您不会得到一个栏。为了能够导航回您的搜索控制器,您需要从普通的 tableview 转到它,或者使用第二个导航控制器,将搜索控制器作为其根视图,就像您的主视图一样。
【讨论】:
我尝试了两种变体。两者都没有明显的结果。导航控制器为零。 哪个导航控制器是零?在您上面的图片中,您的搜索控制器根本没有连接到导航控制器。为了将所有这些场景放在同一个导航堆栈上,您必须从主节点到搜索结果进行推送,然后从结果推送到细节。 我在结果表视图中添加了一个导航控制器。在涉及搜索并选择结果后,导航控制器为零。当左侧的主导航控制器与结果表视图控制器连接时,它似乎工作(在 IB 中是可见的导航栏)。但是当我运行应用程序时,它们在详细视图中仍然没有导航栏。【参考方案3】:终于找到了解决办法。我放弃了结果视图控制器并在原始表视图控制器中处理结果。在导航到详细视图之前,我会隐藏搜索栏(如果处于活动状态):
if searchController.active
searchController.searchBar.hidden = true
当我返回主视图控制器时,我再次取消隐藏搜索栏。
if self.searchController.active
self.searchController.searchBar.hidden = false
【讨论】:
上面的代码对我不起作用,但我能够通过使用一个 ViewController 并声明 self.definesPresentationContext = true 来让它工作【参考方案4】:presentViewController
将视图控制器显示在导航堆栈之外,如果您想将其放入导航堆栈中,您应该像这样使用pushViewController
:
self.navigationController?.pushViewController(searchController, animated: true)
如果 searchController 是顶视图控制器,您可以根据需要编辑导航栏外观
【讨论】:
【参考方案5】:可能在某些代码或情节提要中隐藏了导航栏。只需尝试将以下行放入您要显示导航栏的控制器文件中:
self.navigationController?.navigationBarHidden = false
【讨论】:
没有帮助。 :-( 导航控制器为零。【参考方案6】:在推送或呈现到下一个 ViewController 之前,我添加了这一行
self.navigationController?.isNavigationBarHidden = false
它对我有用
【讨论】:
以上是关于从搜索控制器导航后缺少导航栏的主要内容,如果未能解决你的问题,请参考以下文章