设置statusbarStyle(在iOS 9.0中已弃用)

Jac*_*erg 34 xcode ios swift

刚刚下载了新的xCode 10.0,并且发现旧的statusBarStyle自iOS 9.0以来已被弃用.

警告: Setter for 'statusBarStyle' was deprecated in iOS 9.0: Use -[UIViewController preferredStatusBarStyle]

不推荐的代码: UIApplication.shared.statusBarStyle = .default

我尝试过使用self.preferredStatusBarStyle,但发现该物业只是一个吸气剂.所以任何人都知道如何设置statusBarStyle


编辑

我想在一个函数中更改statusBarStyle,用户可以在不同的主题之间切换.例如:

func changeStatusBar(toDarkMode: Bool) {
    if toDarkMode {
        // Set to light statusBarStyle
    } else { 
        // Set to default
    }
}
Run Code Online (Sandbox Code Playgroud)

Pav*_*los 39

添加View controller-based status bar appearance NOInfo.plist

并在部署信息中选择状态栏样式中的灯光

在此输入图像描述

  • 这就是你第一次设置的方式.如果要在应用程序运行期间切换,请在黑暗和光线之间切换.这是个问题 (3认同)
  • 不,这不是唯一的方法。向上滚动到@MdRashedPervez答案,您将看到另一种更改不同viewControllers状态栏的方法。 (2认同)
  • 我刚刚尝试了@CryingHippos的答案而且工作顺利.我不得不使用`UINavigationController`的扩展名,只是返回了我想要的样式.看看这个! (2认同)

Md *_*vez 24

swift4中,你可以viewDidLoad()在下面的代码中使用这段代码ViewController-

override var preferredStatusBarStyle : UIStatusBarStyle {
    return .lightContent
}
Run Code Online (Sandbox Code Playgroud)


Pau*_*ing 24

使用您现在使用的相同代码设置darkMode变量,然后在系统期望的计算变量中使用它:

var darkMode = false
override var preferredStatusBarStyle : UIStatusBarStyle {
    return darkMode ? .default : .lightContent
}
Run Code Online (Sandbox Code Playgroud)

根据上下文,您可能需要强制刷新屏幕才能使其生效.您可以通过以下调用执行此操作:

setNeedsStatusBarAppearanceUpdate()
Run Code Online (Sandbox Code Playgroud)


Cry*_*ppo 10

如果您使用UINavigationController,您可能还想使用以下代码:

extension UINavigationController {
   open override var preferredStatusBarStyle: UIStatusBarStyle {
      return topViewController?.preferredStatusBarStyle ?? .default
   }
}
Run Code Online (Sandbox Code Playgroud)

原因是setNeedsStatusBarAppearanceUpdate()不叫孩子preferredStatusBarStyle


cmi*_*ilr 5

没有其他建议对我有用。我最终通过以下方法使它起作用:

  1. 设置:

    override var preferredStatusBarStyle : UIStatusBarStyle {
        return .lightContent
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 致电:

    setNeedsStatusBarAppearanceUpdate()
    
    Run Code Online (Sandbox Code Playgroud)