Isu*_*uru 6 transparency uinavigationbar ios swift
我需要使某些视图控制器中的导航栏透明(但栏按钮可见)。
我为此编写了以下扩展名。
extension UINavigationBar {
func setTransparent(_ flag: Bool) {
if flag == true {
setBackgroundImage(UIImage(), for: .default)
shadowImage = UIImage()
backgroundColor = .clear
isTranslucent = true
} else {
setBackgroundImage(nil, for: .default)
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的导航栏的默认样式如下。
UINavigationBar.appearance().isTranslucent = false
UINavigationBar.appearance().tintColor = .white
UINavigationBar.appearance().barTintColor = UIColor(red: 45/255, green: 93/255, blue: 131/255, alpha: 1)
UINavigationBar.appearance().titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
Run Code Online (Sandbox Code Playgroud)
所有这些工作正常。但是如果我必须关闭透明效果,就会出现问题。
在第一个视图控制器中说我不需要导航栏是透明的。
class FirstViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
navigationController?.navigationBar.setTransparent(false)
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
navigationController?.navigationBar.isTranslucent = false
}
}
Run Code Online (Sandbox Code Playgroud)
我从这里推送到第二个视图控制器。在这里,导航栏是透明的。
class SecondViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
navigationController?.navigationBar.setTransparent(true)
}
}
Run Code Online (Sandbox Code Playgroud)
现在,当我弹回之前的视图控制器时,我必须将isTranslucent属性显式设置为false. viewWillAppear正如您在第一个代码片段中看到的那样,我是这样做的。
但问题是,当它发生时,导航栏是黑色的。
我希望这很顺利。我如何避免这种情况?
演示项目在这里上传。
我尝试使用此处描述的解决方案来解决类似问题。但这并不能完全解决我的问题。黑条消失了,但导航栏没有像以前一样出现一秒钟,正如您在此处看到的那样。
小智 7
你看到的黑色导航栏实际上是导航控制器视图背景色。尝试在第一个视图控制器videDidLoad方法中添加此代码
navigationController?.view.backgroundColor = navigationController?.navigationBar.barTintColor
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1970 次 |
| 最近记录: |