我一直在寻找关于此的一些指导,但是在这个深度上没有提出任何问题,也没有将答案更新到最新的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
这有什么解决方案?或想要解决这个问题?
如果需要,可以使用更多信息更新问题。
全部谢谢!
答案 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 -
儿童导航栏 -