如何使根导航栏透明,但子导航栏不是?

时间:2018-04-11 15:15:51

标签: ios swift xcode uinavigationbar

我一直在寻找关于此的一些指导,但是在这个深度上没有提出任何问题,也没有将答案更新到最新的swift版本,或者甚至在最新的swift版本上工作。

这就是我所拥有的:

  • 带有两个条形项目的导航控制器:
    • 离开视图的左键
    • 一个分段视图的右键

我的目标:要使导航根视图控制器的导航栏透明(但按钮和标题仍然可见),而不是子导航 - 没有奇怪的细微差别,比如以前的彩色闪光灯,或截断的导航条(见gif)

我尝试过的事情:

viewWillAppear(_ animated: Bool)函数上,将其设为透明,然后在viewWillDisappear()函数上撤消它。

这是我的代码:


     override func viewWillAppear(_ animated: Bool) {
            super.viewWillAppear(animated)
            print("Will appear")
            self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
            self.navigationController?.navigationBar.shadowImage = UIImage()
            self.navigationController?.navigationBar.isTranslucent = true
        }

        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
        }

这不起作用。:这样做是因为它使根视图控制器的导航栏变得透明,但是当我从条形项目中切换到另一个视图控制器时,它会闪烁原始颜色然后在加载另一个视图时返回清除。

我还尝试了以下建议之一(来自Md):


    override func viewWillAppear(_ animated: Bool) {
            self.navigationController!.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
            self.navigationController?.navigationBar.shadowImage = UIImage()
            self.navigationController?.navigationBar.isTranslucent = true
            self.navigationController!.navigationBar.backgroundColor = UIColor.clear
        }


        override func viewDidDisappear(_ animated: Bool) {
            self.navigationController!.navigationBar.setBackgroundImage(nil, for: UIBarMetrics.default)
            self.navigationController?.navigationBar.shadowImage = nil
            self.navigationController?.navigationBar.isTranslucent = true
            self.navigationController!.navigationBar.backgroundColor = UIColor.red

        }

以下是输出https://giphy.com/gifs/Bcu1Q6qUSV4jPhWo4P

这有什么解决方案?或想要解决这个问题?

如果需要,可以使用更多信息更新问题。

全部谢谢!

1 个答案:

答案 0 :(得分:0)

此代码将使根导航栏透明,但子导航栏不是 -

 override func viewDidLoad() {
            super.viewDidLoad()

        }

     override func viewWillAppear(_ animated: Bool) {
 self.navigationController!.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
                self.navigationController?.navigationBar.shadowImage = UIImage()
                self.navigationController?.navigationBar.isTranslucent = true
                self.navigationController!.navigationBar.backgroundColor = UIColor.clear
            }


            override func viewDidDisappear(_ animated: Bool) {
                self.navigationController!.navigationBar.setBackgroundImage(nil, for: UIBarMetrics.default)
                self.navigationController?.navigationBar.shadowImage = nil
                self.navigationController?.navigationBar.isTranslucent = true
                self.navigationController!.navigationBar.backgroundColor = UIColor.red

            }

输出 - RootNavigation Bar -

enter image description here

儿童导航栏 -

enter image description here