故事板 - 编程方式隐藏导航控制器顶部栏

31

我正在使用Storyboard,尝试在某个按钮被按下(或函数被调用)时隐藏我的主导航控制器的顶部栏。我知道我必须从Storyboard初始化一个对象来引用导航控制器(使用标识符),但当我向这个新创建的对象发送setNavigationBarHidden消息时,在屏幕上并没有发生任何事情。

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UINavigationController *navController = (UINavigationController*) [storyboard instantiateViewControllerWithIdentifier:@"MyNavController"];

[navController setNavigationBarHidden:YES animated:YES];

有人知道问题是什么吗?


你确认了 navController 不等于 nil 吗? - Ryan Wersal
是的,我尝试过了,它不是空的......奇怪的是,我甚至不能设置这个导航控制器的标题,或以任何其他方式与它交互。我真的不知道问题出在哪里... :/ - animal_chin
8个回答

71

问题终于解决了。你应该始终通过视图控制器来隐藏导航栏。

在我上面的问题中,我实例化了一个全新的navigationController,它没有指向屏幕上的真正navController。你可以通过以下方式从视图控制器获取“真正”的导航控制器:

[viewController.navigationController setNavigationBarHidden:YES animated:YES];

5
快速:self.navigationController?.setNavigationBarHidden(true, animated: false) - Matt Butler

22

隐藏导航控制器的顶部栏有两种方法:

1)通过编程

[self.navigationController setNavigationBarHidden:YES animated:YES];

2) 使用界面构建工具

您可以在导航控制器的属性列表中取消选择"显示导航栏"。

enter image description here

请确保您选择了包含导航控制器的场景。这是一个示例场景图像。
enter image description here

12

在 Swift 4 中:

self.navigationController!.navigationBar.isHidden = true

像这样的东西:

override func viewDidLoad() {
        super.viewDidLoad()
       self.navigationController!.navigationBar.isHidden = true
    }

1
对于Swift 4,该属性的名称为isHidden。 - Gerriet

5

我曾经遇到过同样的问题,这个方法对我有用:

navController.navigationBar.hidden = YES;


2
答案是正确的。只是想补充一点,当您离开视图时,可能希望将导航栏放回去,因为其他视图可能会使用它,而当您隐藏一个时,它对所有视图都是隐藏的。
override func viewDidLoad() {
        super.viewDidLoad()
        self.navigationController?.navigationBar.isHidden = true
    }

在您离开视图之前:
override func viewWillDisappear(_ animated: Bool) {
      super.viewWillDisappear(animated)
      self.navigationController?.navigationBar.isHidden = false
}

`


最好使用出现/消失的组合,而不是diLoad / 消失。 - ingconti

1
在Xamarin.iOS中。
base.NavigationController.NavigationBarHidden = true;

0

我通过在属性检查器中取消勾选“显示导航栏”的方式隐藏了我的导航栏。希望这能帮到某些人。

enter image description here


0
在更改属性后,设置RootViewController的根视图控制器。
  UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

// Create Navigation controller with RootViewController
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:[storyBoard instantiateViewControllerWithIdentifier:@"MyRootViewController"]];

设置 RootViewController

 [appDelegate.window setRootViewController: navController];

或者你可以在任何视图控制器中执行

[self.navigationController setNavigationBarHidden:YES animated:YES];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接