我的应用程序目前包含2个UIViewController VC1到VC2。
在VC1中是主屏幕,并在UINavigationBar
在VC2中有一个半透明的UINavigationBar
并在UINavigationBar
上设置UIImage
但是当在这两个视图控制器之间导航时,它会在转换完成之前显示为黑色导航栏。我已尝试设置setNavigationBarHidden
但我不想隐藏导航栏,那么如何删除黑色导航栏?
喜欢这个 -
在VC1中
override func viewWillAppear(animated: Bool) {
if let navController = self.navigationController {
UIGraphicsBeginImageContext(gradientLayer.frame.size)
gradientLayer.renderInContext(UIGraphicsGetCurrentContext()!)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
UIView.animateWithDuration(0.3, animations: {
navController.navigationBar.setBackgroundImage(image, forBarMetrics: .Default)
navController.navigationBar.translucent = false
})
}
}
VC2中的
override func viewWillAppear(animated: Bool) {
UIView.animateWithDuration(0.3, animations: {
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.translucent = true
})
}
override func viewWillDisappear(animated: Bool) {
if let navController = self.navigationController {
UIGraphicsBeginImageContext(gradientLayer.frame.size)
gradientLayer.renderInContext(UIGraphicsGetCurrentContext()!)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
UIView.animateWithDuration(0.3, animations: {
navController.navigationBar.setBackgroundImage(image, forBarMetrics: .Default)
navController.navigationBar.translucent = false
})
}
}
答案 0 :(得分:4)
如果要在转换中隐藏没有黑色的导航栏。 (它在第二个屏幕中)
Swift4:
override func viewWillAppear(_ animated: Bool) {
self.navigationController?.setNavigationBarHidden(true, animated: true)
}
答案 1 :(得分:0)
您需要直接设置NavigationBar
颜色,例如:navigationController.navigationBar.barTintColor = .orange
答案 2 :(得分:0)
这取决于您如何设置Navigation Bar
的颜色。如果您在下一个视图viewDidLoad
中设置它,那么当您按下按钮进行转换时,它将在视图推送下一个控制器之前更改。
您希望它在什么时间改变?
For Before:
viewDidLoad
或viewWillAppear
对于After:
viewDidAppear
并确保您没有在viewWillDisappear
上设置它或图像视图,因此它不会是黑色。
答案 3 :(得分:0)
快速5简单方法
//MARK:- Only use this code where you want to hide the navigation bar
self.navigationController?.setNavigationBarHidden(true, animated: true)