UINavigationbar 将在 UISearchbar 结束搜索后显示,我如何隐藏导航栏

Posted

技术标签:

【中文标题】UINavigationbar 将在 UISearchbar 结束搜索后显示,我如何隐藏导航栏【英文标题】:UINavigationbar will show after UISearchbar end search,how can i hide the navigationbar 【发布时间】:2014-09-25 03:10:57 【问题描述】:

我的应用在开头隐藏了导航栏。

但在视图(全屏)中,有一个搜索栏。

当我开始搜索时,搜索栏停留在视图的顶部。

然后我取消搜索,改变搜索栏的框架,出现导航栏。

为什么会这样?如何隐藏导航栏?

我试过了:

我在 searchDisplayControllerWillEndSearch 和 searchDisplayControllerDidEndSearch 中添加了一些日志以显示导航栏状态。

在searchDisplayControllerDidEndSearch中,navigationController.navigationBarHidden为YES,

在 searchDisplayControllerDidEndSearch 中,navigationController.navigationBarHidden 为 NO。

然后我在searchDisplayControllerDidEndSearch中设置navigationController.navigationBarHidden to YES,导航栏会显示但会在短时间内隐藏,导航栏将不再显示。(navigationController.navigationBarHidden永远是YES)

有什么想法吗?

谢谢!

【问题讨论】:

【参考方案1】:

在 ViewDidLoad 方法中编写以下代码。

self.navigationController.navigationBarHidden =YES

其他智慧

self.navigationController.navigationBar.hidden =YES;

【讨论】:

我在searchDisplayControllerDidEndSearch中将self.navigationController.navigationBar.hidden设置为YES,就可以了。但是第一次导航栏会先显示,然后马上隐藏,太诡异了。有什么办法隐藏导航栏,用户不会看到它。【参考方案2】:

我已经在这里找到了类似的问题:UISearchBar with hidden UINavigationBar

以及解决方案:IPHONE: ABPeoplePickerNavigationController hidden navigation bar

【讨论】:

【参考方案3】:

您可以在viewDidLoad中使用以下代码隐藏导航栏Self.navigationController.navigationBar.hidden = YES;

如果您正在展示导航控制器,那么您可以在展示之前隐藏您的导航栏,使用此代码yournavigation.navigaionBar.hidden = YES;

我们可以使用任一代码隐藏导航栏self.navigationController.navigationBarHidden = YES;

Self.navigationController.navigationBar.hidden = YES;

最后一个它可能会解决您的问题隐藏viewWillAppear中的导航栏。这里我添加代码

- (void)viewWillAppear:(BOOL)animated self.navigationController.navigationBar.hidden = YES; [super viewWillAppear:animated];

【讨论】:

你不应该使用 navigationController.navigationBar.hidden - 使用 navigationController.navigationBarHidden 首先,感谢您的回答。如果我使用navigationController.navigationBar.hidden,并设置为YES,顶部会有一个黑色空间,似乎导航栏仍然使用这个空间。 @Simon 嗨西蒙,但刚才我检查了两个代码都工作正常,是否有任何理由不使用 navigationController.navigationBar.hidden ,你能解释一下吗? UINavigationController 控制导航栏。如果您使用 navigationController.navigationBar.hidden,那么稍后导航控制器将显示或隐藏它以匹配它想要的内容;而如果你使用 navigationController.navigationBarHidden 那么控制器会根据你的需要显示或隐藏它。 @simon 好的,谢谢你的信息,我也修改了我的答案。

以上是关于UINavigationbar 将在 UISearchbar 结束搜索后显示,我如何隐藏导航栏的主要内容,如果未能解决你的问题,请参考以下文章

创建此自定义 UINavigationbar ios 的最佳方法

UINavigationBar titleview 图像未与 UINavigationBar 对齐

由于奇怪的 UINavigationBar 视图层次结构,自定义 UINavigationBar 不起作用

UINavigationBar

UITableView 滚动 UINavigationBar

UINavigationBar 一个有样式的view