【发布时间】:2018-04-05 06:49:55
【问题描述】:
我需要使某些视图控制器中的导航栏透明(但栏按钮可见)。
我为此编写了以下扩展。
extension UINavigationBar {
func setTransparent(_ flag: Bool) {
if flag == true {
setBackgroundImage(UIImage(), for: .default)
shadowImage = UIImage()
backgroundColor = .clear
isTranslucent = true
} else {
setBackgroundImage(nil, for: .default)
}
}
}
我的导航栏的默认样式如下。
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]
这一切都很好。但是如果我必须关闭透明效果,就会出现问题。
在第一个视图控制器中说我不需要导航栏是透明的。
class FirstViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
navigationController?.navigationBar.setTransparent(false)
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
navigationController?.navigationBar.isTranslucent = false
}
}
我从这里推送到第二个视图控制器。在这里,导航栏是透明的。
class SecondViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
navigationController?.navigationBar.setTransparent(true)
}
}
现在当我跳回之前的视图控制器时,我必须将isTranslucent 属性显式设置为false。正如您在第一个代码 sn-p 中看到的那样,我在 viewWillAppear 中执行此操作。
但问题是,导航栏在发生时是黑色的。
我希望这一切顺利。我该如何避免这种情况?
演示项目已上传here。
我尝试了here 描述的解决方案来解决类似的问题。但这并不能完全解决我的问题。黑条消失了,但导航栏没有像以前一样出现一秒钟,您可以看到here。
【问题讨论】:
标签: ios swift uinavigationbar transparency