没有导航栏的UINavigationController?

122

我有一个通用应用程序,在iPad版本中,我使用UISplitViewController创建类似于邮件应用的界面。

我在推动新的详细视图时遇到了麻烦,所以我决定使用UINavigationController,这样我就可以根据需要推送和弹出视图。然而,我不想使用导航视图或工具栏。但无论我做什么,都无法隐藏导航栏。

我尝试在IB中取消选中“显示导航栏”,还尝试设置:

[self.navigationController setNavigationBarHidden:YES];

我已经尝试在viewDidLoad/viewDidAppear/viewWillAppear中以及将要被推出的每个视图中使用它。什么都不起作用。

这里是否有什么我遗漏了?是否可能拥有一个没有工具栏或导航栏的UINavigationController


self 所属的类的超类是什么? - user142019
6个回答

201

您应该能够执行以下操作:

self.navigationController.navigationBar.isHidden = true //Swift 5

其中self.navigationController(显然)是UINavigationController的一个实例。我测试之前只是简单地测试了一下,但对我来说似乎有效。


2
所以,在你的情况下,self.navigationController.navigationBar.hidden = YES; - Ashwin
4
好的!搞定了!不过我想补充一点,我能够通过在IB中勾选导航工具栏的“隐藏”框来完成操作,而不需要写代码。谢谢! - DOOManiac
1
是的,对此很抱歉。我应该意识到你正在使用 IB 并提到隐藏框,而不是直接使用代码。最近我一直在尝试完全通过编程来创建界面,而没有使用 .xib 文件,所以我的回答就直接涉及到了这个方面。 - Ashwin
5
我在我的视图控制器中使用以下代码 - (void)viewWillAppear:(BOOL)animated { self.navigationController.navigationBar.hidden = YES; } 来调用viewWillAppear方法,它可以正常工作。 - Ali
3
导航栏已隐藏,但我的视图控制器屏幕没有扩展到全屏。 - ArdenDev
显示剩余3条评论

40
如果您不需要导航栏,并希望内容上移至导航栏通常所在的位置,您应该使用:
self.navigationController.navigationBarHidden = YES;

这将给你一个像这样的结果:

enter image description here

self.navigationController.navigationBar.hidden = YES; 则会在导航栏应该出现的位置留下空白,如下所示:

enter image description here


iOS 6的结果与iOS 7有很明显的区别。从iOS 7开始,似乎空格被移除了,但我会等待更多人来验证这一点。 - Alex Zavatone

40

在 Xcode 4.3.2 中:

  1. 在 storyboard 中选择导航控制器。
  2. 在(右侧)工具面板中选择属性检查器。
  3. 在导航控制器类别下,您有两个复选框:

    [] 显示导航栏

    [] 显示工具栏

对我有用...


8

Swift 4

我把它藏在viewWillAppear方法里

     override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        self.navigationController?.isNavigationBarHidden = true;
    }

如果您想在下一个视图中显示返回按钮,那么在推送转场时可以将其放回。

     override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
     {
        self.navigationController?.isNavigationBarHidden = false;
     }

3

使用Swift 3进行编程

self.navigationController.isNavigationBarHidden = true

或者

self.navigationController.navigationBar.isHidden = true

注意:在iOS 10上测试这两种方法,我没有看到任何区别。

1
所有这些答案仍然在顶部留下状态栏的空间 - 添加此行以删除它:
navController.navigationBar.isHidden = true
navController.accessibilityFrame = CGRect.zero

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