如何才能在一个视图控制器中使UINavigationController透明?

Ish*_*lla 9 uinavigationbar uinavigationcontroller ios swift

我想NavigationBar只透明一个ViewController.但是,在更改NavigationBar单个内容后ViewController,整个navigationController变为透明,并在几秒钟后崩溃.这是我的代码块:

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

    }
Run Code Online (Sandbox Code Playgroud)

它崩溃了

self.navigationController!.navigationBar.setBackgroundImage(nil, forBarMetrics: UIBarMetrics.Default)
Run Code Online (Sandbox Code Playgroud)

Sum*_*rya 5

我们可以像这样实现这个要求:

在其中UIViewController,我们要清除的导航栏颜色应在明确UIViewController我们需要编写这些代码viewDidLoad,viewWillAppearviewWillDisappear方法

viewDidLoad方法中我们需要编写为了更好的显示结果如果我们没有写入放置代码片段然后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
}
Run Code Online (Sandbox Code Playgroud)

当我们移动到其他屏幕(推另一个UIViewController)同样UINavigationController我们需要设置barTintColor否则它将显示为黑色.


小智 3

尝试给定的代码使导航栏在 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()
Run Code Online (Sandbox Code Playgroud)

希望这段代码能帮助你..谢谢