swift - 当我在 Swift 中使用 UITabbar 时,无法隐藏状态背景
问题描述
我正在使用 UITab 栏。在我的 UITabbar 中有 4 个项目,每个标签栏都有导航控制器。
我想将渐变颜色放在视图控制器的状态背景中的 1-3 个项目中,但在视图控制器 4 中我希望它具有状态清晰的背景。
我的问题是当我转到选项卡 1-3 然后转到选项卡 4 时,状态背景颜色将根据选项卡 1-3 的变化而变化。但我希望选项卡 4 的状态背景颜色是透明的。
我用来更改标签 1-3 中状态背景颜色的代码
if let status = UIApplication.shared.value(forKey: "statusBar") as? UIView {
status.setGradientBackground(colorOne: Colors.carmine, colorTwo: Colors.cherryRed, colorThree: Colors.cherryRedTwo)
}
我试图通过这种方法在选项卡 4 中隐藏状态栏
1.将基于视图控制器的状态栏外观更改为YES
2.放
setNeedsStatusBarAppearanceUpdate()
在视图didload
3.放
override var prefersStatusBarHidden: Bool {
return true
}
在 viewdidappear 但仍然不工作状态栏的背景没有隐藏并且状态背景颜色仍然根据选项卡 1-3 的变化。
它有一种使用此代码的方法
UIApplication.shared.isStatusBarHidden = true
并将其放在每个视图控制器中
但它有这样的警告
Setter for 'isStatusBarHidden' was deprecated in iOS 9.0: Use -[UIViewController prefersStatusBarHidden]
我想知道在UITab中改变状态栏颜色的正确方法谢谢。
解决方案
好的,如果我正确理解您想要什么,您想让您的标签 4 有一个清晰的状态栏,如果您在标签 4 中的主视图有子视图,您可以尝试以下方法。更改主视图颜色后,状态栏颜色也会更改:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(true)
if let lastTab = tabBarController?.children[3] {
lastTab.view.backgroundColor = UIColor.white // status bar will be clear
}
}
推荐阅读
- while-loop - 在调试中工作但不发布的循环
- c# - 如何按顺序运行 AWS lambda 函数
- angular - Angular 7 PWA 网络存储选择
- libxlsxwriter - 使用 Libxlsxwriter 在 Excel 中读取单元格值?
- php - Php:在文件中动态替换文件名和变量
- azure-cosmosdb - 当我们没有获得相应函数的指标时,如何记录 Cosmos DB CountAsync 和 MaxAsync 操作的 RequestCharge?
- html - 我可以从 fields_for 为 div 设置一个 id 吗?
- jquery - 输入中只允许数字和“.”(点)
- angular - Angular Reactive Forms,将数据对象与 FormArray 的每个对象绑定的方法
- c# - 如何打开 Thumbscache.db