首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在一个视图控制器中使UINavigationController透明?

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

Stack Overflow用户
提问于 2016-05-18 19:24:17
回答 4查看 10.5K关注 0票数 11

我想让NavigationBar在一个ViewController中变得透明。但是,在单个ViewController中更改NavigationBar时,整个navigationController就会变得透明,几秒钟后crashes.Here就是我的代码块了:

代码语言:javascript
复制
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

    }

它崩溃成一条线

代码语言:javascript
复制
self.navigationController!.navigationBar.setBackgroundImage(nil, forBarMetrics: UIBarMetrics.Default)
EN

回答 4

Stack Overflow用户

发布于 2018-01-25 14:50:52

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

在哪个UIViewController中我们想要清除NavigationBar颜色应该在UIViewController中清楚我们需要用viewDidLoadviewWillAppearviewWillDisappear方法编写这些代码

viewDidLoad方法中,为了获得更好的显示效果,我们需要编写代码片段,如果我们没有编写put代码片段,那么在显示will视图之后,navigation bar的颜色将发生变化。

代码语言:javascript
复制
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
}

当我们移动到同一个UINavigationController上的其他屏幕(按下另一个UIViewController)时,我们需要设置barTintColor,否则它将显示为黑色。

票数 7
EN

Stack Overflow用户

发布于 2016-05-18 19:58:54

尝试使用给定的代码在swift中使导航栏透明:-

代码语言:javascript
复制
    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()

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

票数 3
EN

Stack Overflow用户

发布于 2018-01-20 19:58:17

Swift 4

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37298177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档