我想让NavigationBar在一个ViewController中变得透明。但是,在单个ViewController中更改NavigationBar时,整个navigationController就会变得透明,几秒钟后crashes.Here就是我的代码块了:
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)发布于 2018-01-25 14:50:52
我们可以像这样实现这个需求:
在哪个UIViewController中我们想要清除NavigationBar颜色应该在UIViewController中清楚我们需要用viewDidLoad,viewWillAppear和viewWillDisappear方法编写这些代码
在viewDidLoad方法中,为了获得更好的显示效果,我们需要编写代码片段,如果我们没有编写put代码片段,那么在显示will视图之后,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
}当我们移动到同一个UINavigationController上的其他屏幕(按下另一个UIViewController)时,我们需要设置barTintColor,否则它将显示为黑色。
发布于 2016-05-18 19:58:54
尝试使用给定的代码在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()希望这段代码能帮助你..谢谢
发布于 2018-01-20 19:58:17
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.clearhttps://stackoverflow.com/questions/37298177
复制相似问题