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

4

我的应用程序目前包含两个视图控制器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
        })
    }
}

请查看此帖子:https://dev59.com/HFkS5IYBdhLWcg3wdmgx#40255483。 - Joe
5个回答

9
如果您想在过渡中隐藏导航栏但不带黑色背景。(它在第二个屏幕中)
Swift4:
override func viewWillAppear(_ animated: Bool) {
  self.navigationController?.setNavigationBarHidden(true, animated: true)  
  }

请更具体地说明以便回答。 - Learning Always
谢谢,伙计!它起作用了。我使用了导航栏的 isHidden 属性,但它没有起作用。 - Vinoth Vino

2

Swift 5 简单方法

//MARK:- Only use this code where you want to hide the navigation bar 
self.navigationController?.setNavigationBarHidden(true, animated: true)

0

您需要直接设置NavigationBar的颜色,例如:navigationController.navigationBar.barTintColor = .orange


我已经在viewWillDisappear中将导航栏的颜色设置回来了,但仍然不起作用... - cs.1007
也许您可以发布您的代码,这样我们就可以更好地了解情况? - Yohst

0

这取决于您如何设置导航栏的颜色。如果您在下一个视图的viewDidLoad中设置它,那么当您按下转换按钮时,它将在视图推送下一个控制器之前更改。

您希望在什么时候更改?

对于之前: viewDidLoadviewWillAppear

对于之后: viewDidAppear

并确保您不会在viewWillDisappear上设置它或imageView,以便它不会变黑。


我这样做:在VC1中,viewWillAppear设置橙色渐变导航栏。如果移动到VC2,viewWillAppear(VC2)将图像设置为导航栏,当按下返回按钮时,viewWillDisappear将导航栏设置为橙色渐变。 - cs.1007

0

Obj C:

self.extendedLayoutIncludesOpaqueBars = true;

Swift:

extendedLayoutIncludesOpaqueBars = true

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接