如何在通过控制器移动时隐藏UINavigationBar?

问题描述 投票:0回答:2

我有一个应用程序,它需要在第一个ViewController上具有清晰的NavigationBar,在第二个上需要白色NavigationBar。

问题是,当我在各个控制器之间移动时(通过UIBarButton),这条可怕的白色条纹仍然存在。怎么了?

//for first ViewController to hide navigationBar, second is the same, but "true" and .white

  navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
  navigationController?.navigationBar.isTranslucent = false
  navigationController?.navigationBar.backgroundColor = .clear
  navigationController?.navigationBar.setValue(false, forKey: "hidesShadow")

At first start it works fine, but when you return with button:

ios swift uinavigationbar
2个回答
0
投票

问题是,您的两个控制器都嵌入具有单个导航栏的单个导航控制器中。

因此,当您在第二个控制器上更改导航栏的颜色和样式,然后返回到您的第一个控制器时,这些更改仍然存在,因此您会看到白色的栏。

我建议您隐藏第一个控制器的工具栏,然后在第二个控制器上显示它。或在viewWillAppear方法中每次更改其样式(颜色,背景图像)。


0
投票

请勿修改第一个View控制器导航栏。在要从第二个视图控制器中包含的AppDelegate中添加修改和更改。在第一个视图控制器中,将导航栏隐藏在viewWillAppear中,然后再次显示在viewWillDisappear中。

在第一视图控制器中

override func viewWillAppear(_ animated: Bool) {
    navigationController?.setNavigationBarHidden(true, animated: true)
}

override func viewWillDisappear(_ animated: Bool) {
    navigationController?.setNavigationBarHidden(false, animated: true)
}
© www.soinside.com 2019 - 2024. All rights reserved.