Swift - 在2个视图控制器之间导航时如何删除黑色导航栏

时间:2017-01-05 03:35:09

标签: ios swift uinavigationbar

我的应用程序目前包含2个UIViewController VC1到VC2。

在VC1中是主屏幕,并在UINavigationBar

上有橙色渐变图像

在VC2中有一个半透明的UINavigationBar并在UINavigationBar上设置UIImage

但是当在这两个视图控制器之间导航时,它会在转换完成之前显示为黑色导航栏。我已尝试设置setNavigationBarHidden但我不想隐藏导航栏,那么如何删除黑色导航栏?

喜欢这个 -

navigation from VC1 to VC2

在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
        })
    }
}

4 个答案:

答案 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: viewDidLoadviewWillAppear

对于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)