iOS - 仅在一个视图上隐藏导航栏?

Posted

技术标签:

【中文标题】iOS - 仅在一个视图上隐藏导航栏?【英文标题】:iOS - Hide navigation bar only on one view? 【发布时间】:2017-02-03 19:17:58 【问题描述】:

我有一个登录视图控制器,成功登录后,它会将我的用户推送到另一个视图控制器 (ViewControllerB)。话虽如此,ViewControllerB 嵌入在我已经用菜单按钮格式化的 UINavigationController 中。

因为我正在使用来自登录视图控制器的推送转场,所以这个转场会导致我的 UINavigationBar 被空白导航栏和后退按钮(不酷)覆盖。也就是说,我尝试使用以下代码从登录视图控制器中隐藏导航控制器:

loginviewcontroller.m

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

当我这样做时,带有后退按钮的不需要的导航栏会被删除,我的另一个导航栏会被删除!伟大的。但是,当我然后导航到其他屏幕时,我的导航栏仍然隐藏(并且我希望它在我的用户通过 ViewControllerB 时出现)。

我尝试在成功登录时使用模态转场,但当然,这使我无法在登录时导航到其他带有转场的屏幕。

知道我该怎么做吗?

【问题讨论】:

【参考方案1】:

添加这个:

- (void)viewWillDisappear:(BOOL)animated 
    [super viewWillDisappear:animated];
    [self.navigationController setNavigationBarHidden:NO animated:animated];

【讨论】:

【参考方案2】:

你应该从你的第一个 Viewcontroller 或你的 loginViewController 嵌入 UINavigationController 并且在这个 ViewController 中你将隐藏导航栏,对于你的下一个 viewController 你可以取消隐藏导航栏。它对我有用。

【讨论】:

【参考方案3】:

斯威夫特 3

override func viewWillAppear(_ animated: Bool) 

                //for hide navigation bar in current view
    super.viewWillAppear(animated)

    self.navigationController?.setNavigationBarHidden(true, animated: animated)


override func viewWillDisappear(_ animated: Bool) 

                //for unhide in navigation bar in next/previous view
    super.viewWillDisappear(animated)

    self.navigationController?.setNavigationBarHidden(false, animated: animated)

【讨论】:

以上是关于iOS - 仅在一个视图上隐藏导航栏?的主要内容,如果未能解决你的问题,请参考以下文章

隐藏导航栏将视图“向上”移动

导航栏仅在 iOS5 中部分隐藏

iOS:在导航栏中显示搜索栏时隐藏范围栏

iOS:滚动表格视图时隐藏和显示自定义导航栏

防止 UISearchController 在 IOS8 中隐藏视图导航栏

iOS导航栏在滚动时被隐藏(也是一种滚动),无论它在滚动视图之外