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

时间:2016-05-18 11:24:17

标签: ios swift uinavigationcontroller uinavigationbar

我想让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

    }

它崩溃了

self.navigationController!.navigationBar.setBackgroundImage(nil, forBarMetrics: UIBarMetrics.Default)

4 个答案:

答案 0 :(得分:5)

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

我们要在UIViewController清楚明确导航栏颜色的UIViewController我们需要在viewDidLoadviewWillAppear和{{1}中编写这些代码方法

viewWillDisappear方法中,我们需要写一下,为了更好的显示结果,如果我们没有写下代码片段,那么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 } 的其他屏幕(推送另一个UIViewController)时,我们需要设置UINavigationController,否则它将显示为黑色。

答案 1 :(得分:2)

尝试使用给定代码使导航栏在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()

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

答案 2 :(得分:1)

viewWillAppear

  self.navigationController!.navigationBar.backgroundColor = UIColor.clearColor()

并在viewWillDisappear

  self.navigationController!.navigationBar.backgroundColor = UIColor(red: (247.0 / 255.0), green: (247.0 / 255.0), blue: (247.0 / 255.0), alpha: 1)  // this is default bar color you can set your desired color if you are using custom color for navigation bar

希望这会有所帮助:)

答案 3 :(得分:1)

Swift 4

self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.isTranslucent = true
self.navigationController?.view.backgroundColor = UIColor.clear
self.navigationController?.navigationBar.backgroundColor = UIColor.clear