如何在控制器之间移动时隐藏UINavigationBar



我有一个应用程序,第一个ViewController需要透明的导航栏,第二个需要白色的导航栏。

问题是,当我在控制器之间移动时(通过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")

在第一次启动时,它运行良好,但当您带着按钮返回时:

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

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

我建议您隐藏第一个控制器的栏,并在第二个控制器上显示。或者每次在viewWillAppear方法内更改其样式(颜色、背景图像(。

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

在第一视图中控制器

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

最新更新