首页 > 解决方案 > 当我在 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中改变状态栏颜色的正确方法谢谢。

标签: swift

解决方案


好的,如果我正确理解您想要什么,您想让您的标签 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

    }
 }

推荐阅读