我想让NavigationBar
只透明一个ViewController
。但是,在更改单个NavigationBar
中的ViewController
后,整个navigationController
变得透明,并在几秒钟后发生崩溃。这是我的代码块:
override func viewWillAppear(animated: Bool) {
self.navigationController!.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.translucent = true
self.navigationController!.view.backgroundColor = UIColor.clearColor()
}
override func viewDidDisappear(animated: Bool) {
self.navigationController!.navigationBar.setBackgroundImage(nil, forBarMetrics: UIBarMetrics.Default)
self.navigationController?.navigationBar.shadowImage = nil
self.navigationController?.navigationBar.translucent = true
}
它崩溃了
self.navigationController!.navigationBar.setBackgroundImage(nil, forBarMetrics: UIBarMetrics.Default)
答案 0 :(得分:5)
我们可以像这样实现这个要求:
我们要在UIViewController
清楚明确导航栏颜色的UIViewController
我们需要在viewDidLoad
,viewWillAppear
和{{1}中编写这些代码方法
在viewWillDisappear
方法中,我们需要写一下,为了更好的显示结果,如果我们没有写下代码片段,那么viewDidLoad
颜色会在显示后显示变化。
navigation bar
当我们移到同一override func viewDidLoad() {
super.viewDidLoad()
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.isTranslucent = true
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.isTranslucent = true
self.navigationController?.navigationBar.barTintColor = UIColor.clear
self.navigationController?.navigationBar.backgroundColor = UIColor.clear
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
self.navigationController?.navigationBar.setBackgroundImage(nil, for: .default)
self.navigationController?.navigationBar.shadowImage = nil
self.navigationController?.navigationBar.isTranslucent = true
}
的其他屏幕(推送另一个UIViewController
)时,我们需要设置UINavigationController
,否则它将显示为黑色。
答案 1 :(得分:2)
尝试使用给定代码使导航栏在swift中透明: -
self.navigationController!.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.translucent = true
self.navigationController!.view.backgroundColor = UIColor.clearColor()
self.navigationController?.navigationBar.backgroundColor = UIColor.clearColor()
希望这段代码能帮到你..谢谢
答案 2 :(得分:1)
在viewWillAppear
,
self.navigationController!.navigationBar.backgroundColor = UIColor.clearColor()
并在viewWillDisappear
self.navigationController!.navigationBar.backgroundColor = UIColor(red: (247.0 / 255.0), green: (247.0 / 255.0), blue: (247.0 / 255.0), alpha: 1) // this is default bar color you can set your desired color if you are using custom color for navigation bar
希望这会有所帮助:)
答案 3 :(得分:1)
Swift 4
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.isTranslucent = true
self.navigationController?.view.backgroundColor = UIColor.clear
self.navigationController?.navigationBar.backgroundColor = UIColor.clear