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

Posted

技术标签:

【中文标题】如何在 Swift 中立即隐藏导航栏?【英文标题】:How to hide navigation bar immediately in Swift? 【发布时间】:2016-06-06 02:52:58 【问题描述】:

我的 UIViewController 嵌入在导航控制器中:

我尝试setNavigationBarHidden:animated: 隐藏通知栏。它可以工作,但有大约 2 秒的延迟。这是截图:

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

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

如何在屏幕启动时立即隐藏navigationbar

【问题讨论】:

您在viewDidLoad 中做其他事情吗?我在测试应用程序中尝试了您的代码,没有延迟。 不,都在 viewDidLoad() 中,你认为是模拟器缓存问题吗?有时我的屏幕会先显示旧布局,然后延迟 2 秒转移到新布局。 我从未见过这样的事情。我的测试是在模拟器中。您是否始终如一地看到延迟。您是否尝试过从模拟器中删除应用程序并重新安装?如果您一直看到它,您是否尝试过 time-profile Instrument? 我尝试在模拟器和真实设备上重新安装并安装它。一样的。奇怪的情况。 您有使用自定义字体吗?如果将它们切换回默认字体会怎样? 【参考方案1】:

ViewController初始化时隐藏navgationBarViewController.navigationController?.setNavigationBarHidden(true, animated: false)

【讨论】:

抱歉,您能详细解释一下吗?这段代码应该放在哪里? 尝试在初始化函数中隐藏navgationBarvc =[ [UIViewController alloc] init]; vc.navgationBar.hide = YES【参考方案2】:

According the official document:

每个应用都必须提供一个启动文件或至少一个静态图像。

延迟是由主情节提要文件的启动屏幕引起的。不要将启动屏幕文件设置为 Main.storyboard 文件。

Project settings > General -> App Icons and Launch Images -> Launch Screen File

将其设置为另一个故事板:

【讨论】:

【参考方案3】:

更好的方法是在 viewWillLayoutSubviews() 中实现您的代码。如果您使用导航或点击栏,这是一种更好的方法

斯威夫特 4

override func viewWillLayoutSubviews() 
    self.navigationController?.isNavigationBarHidden = true

【讨论】:

【参考方案4】:

#添加这一行indside view did load方法

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

##Otherwise 直接从 StoreyBoard 执行此操作

//设置顶部栏无

[![在此处输入图像描述][1]][1] [1]:http://i.stack.imgur.com/CGISC.png

希望对你有帮助。

【讨论】:

将顶部栏设置为无在运行时不会执行任何操作,因为此选项是模拟指标的一部分。这只是模拟界面生成器中的渲染。【参考方案5】:

试试这个...

override func viewWillDisappear(animated: Bool) 
    super.viewWillDisappear(animated)

    self.navigationController?.navigationBarHidden = true

【讨论】:

供未来用户使用。我有类似的问题,但从另一方面。我有没有导航栏的主视图和带导航栏的第二个视图。当我从第二个视图返回到主视图时,我希望看不到导航栏,但它会在大约 2 秒后可见。我的问题的解决方法是这个答案。需要将 WillDisappear 添加到第二个 Viewcontroller 文件中。然后当我返回主屏幕时,我根本看不到导航栏。【参考方案6】:

需要在 viewDidLoad() 方法中隐藏 UINavigationBar

override func viewDidLoad() 
super.viewDidLoad()
self.navigationController?.navigationBarHidden = true 

【讨论】:

【参考方案7】:

对于 swift 3:-

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

【讨论】:

以上是关于如何在 Swift 中立即隐藏导航栏?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中隐藏第一个 ViewController 的导航栏?

如何在uipageviewcontroller swift中转换时隐藏导航栏

如何在 Swift 中为导航栏添加阴影并隐藏边框?

隐藏的导航栏和更改的应用程序流程 - swift

搜索显示控制器如何隐藏导航栏?

如何在 Swift 中使 iPhone 状态栏透明?