【问题标题】:Swift - how to remove black navigation bar when navigate between 2 view controllerSwift - 如何在 2 个视图控制器之间导航时删除黑色导航栏
【发布时间】:2017-01-05 03:35:09
【问题描述】:

我的应用程序目前包含 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
        })
    }
}

【问题讨论】:

标签: ios swift uinavigationbar


【解决方案1】:

如果你想隐藏导航栏而不是黑色的过渡。 (在第二屏)

Swift4:

override func viewWillAppear(_ animated: Bool) {
  self.navigationController?.setNavigationBarHidden(true, animated: true)  
  }

【讨论】:

  • 请提供更具体的回答
  • 谢谢你!有效。我使用了导航栏的 isHidden 属性,但不起作用。
【解决方案2】:

Swift 5 简单方法

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

【讨论】:

    【解决方案3】:

    这取决于您如何设置Navigation Bar 的颜色。如果你在下一个视图的viewDidLoad 中设置它,那么当你按下一个按钮进行转换时,它会在视图推动下一个控制器之前发生变化。

    您希望它在什么时间更改?

    对于之前: viewDidLoadviewWillAppear

    之后: viewDidAppear

    并确保您没有在viewWillDisappear 上设置它或 imageView,因此它不会是黑色的。

    【讨论】:

    • 我是这样写的:在VC1中,viewWillAppear设置橙色渐变导航栏。如果移动到 VC2,viewWillAppear(VC2) 将图像设置为导航栏,当按下返回按钮时,viewWillDisappear 将导航栏设置为橙色渐变。
    【解决方案4】:

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

    【讨论】:

    • 我已经在 viewWillDisappear 中设置了导航栏的颜色,但仍然无法正常工作...
    • 或许可以发布您的代码,以便我们更好地了解发生了什么?
    【解决方案5】:

    对象 C:

    self.extendedLayoutIncludesOpaqueBars = true;
    

    斯威夫特:

    extendedLayoutIncludesOpaqueBars = true
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-10
      • 1970-01-01
      • 2015-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多