如何在Swift中立即隐藏导航栏?

4

我的UIViewController被嵌入了一个导航控制器:

enter image description here

我尝试使用setNavigationBarHidden:animated:来隐藏通知栏,它确实起作用,但有大约2秒的延迟。这是截图:

enter image description here

我的用法是在viewDidLoad()中添加它:

override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationController?.setNavigationBarHidden(true, animated: false)
}

如何在屏幕启动时立即隐藏导航栏?

你在 viewDidLoad 中还做了其他事情吗?我在测试应用程序中尝试了你的代码,没有延迟。 - Paulw11
不,那些都在viewDidLoad()里面了。你认为这是模拟器缓存问题吗?有时候我的屏幕会先显示旧的布局,然后延迟2秒钟转换到新的布局。 - Cody
我从未见过这样的情况。我的测试是在模拟器中进行的。你是否一直看到这个延迟?你尝试过从模拟器中删除应用并重新安装吗?如果你一直看到这个问题,你尝试过使用时间分析工具吗? - Paulw11
你可能看到了启动屏幕,包括导航栏,当应用程序启动时,然后导航栏在应用程序启动后被隐藏。 - Paulw11
只有使用一个不包含导航控制器的不同故事板来进行启动,才能实现此功能。 - Paulw11
显示剩余4条评论
7个回答

13

当 ViewController 初始化时隐藏导航栏 ViewController.navigationController?.setNavigationBarHidden(true, animated: false)


抱歉,您能详细解释一下吗?这段代码应该放在哪里? - Cody
尝试在initialize函数中隐藏navigationBar:vc =[ [UIViewController alloc] init]; vc.navgationBar.hide = YES - Dan

5
更好的方式是在viewWillLayoutSubviews()中实现您的代码。如果您使用导航或标签栏,则这是更好的方法。 Swift 4:
override func viewWillLayoutSubviews() {
    self.navigationController?.isNavigationBarHidden = true
}

5
据官方文档所述,每个应用程序必须提供一个启动文件或至少一个静态图像。造成延迟的原因是来自主故事板文件的启动屏幕。不要将启动屏幕文件设置为你的Main.storyboard文件。在项目设置>常规->应用程序图标和启动图像->启动屏幕文件中:将其设置为另一个故事板。请参考以下截图:enter image description hereenter image description here

3

#在viewDidLoad方法内添加此行代码

override func viewDidLoad() {
        super.viewDidLoad()
        navigationController?.isNavigationBarHidden = true
    }

##否则,直接在StoreyBoard中执行以下操作

//将顶栏设置为无

[![输入图片说明][1]][1] [1]: http://i.stack.imgur.com/CGIsC.png

希望这可以帮助你。


2
将顶部栏设置为“无”在运行时不会产生任何影响,因为此选项是模拟指标的一部分。这仅在界面构建器中模拟渲染。 - Riad Krim

2
尝试这个...
override func viewWillDisappear(animated: Bool) {
    super.viewWillDisappear(animated)

    self.navigationController?.navigationBarHidden = true
}

给未来的用户。我遇到了类似的问题,但是从另一个方面来看。我有一个没有导航栏的主视图和一个带有导航栏的第二个视图。当我从第二个视图返回主视图时,我希望不会看到导航栏,但它会在大约2秒钟内显示出来。解决我的问题的方法是这个答案。需要在第二个视图控制器文件中添加WillDisappear。然后当我返回到主屏幕时,我根本看不到导航栏。 - Dmitry Senashenko

1
对于Swift 3:
override func viewDidLoad() {
        super.viewDidLoad()
        self.navigationController?.isNavigationBarHidden = true
    }

1
在viewDidLoad()方法中隐藏UINavigationBar。
override func viewDidLoad() {
super.viewDidLoad()
self.navigationController?.navigationBarHidden = true 
}

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