preferredStatusBarStyle var在iOS12中不起作用?

Nos*_*mus 10 ios12 xcode10

添加

application.statusBarStyle = .lightContent
Run Code Online (Sandbox Code Playgroud)

到我的AppDelegate的didFinishLaunchingWithOptions方法也没有添加

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

到VC不再适用于iOS12/Xcode10

有任何想法吗?

mat*_*att 47

这与iOS 12无关.你只是规则错了.

在导航控制器的情况下,状态栏的颜色不是由视图控制器确定的preferredStatusBarStyle.

令人惊讶的是,导航栏确定了它barStyle.要获得光状态栏文本,请说(在视图控制器中):

self.navigationController?.navigationBar.barStyle = .black
Run Code Online (Sandbox Code Playgroud)

很难相信,但却是如此.多年前我直接从Apple获得了这些信息.

您还可以在故事板中执行此设置.

例!导航栏的酒吧风格是.default:

在此输入图像描述

导航栏的酒吧风格是.black:

在此输入图像描述

  • 马特,感谢您的回复和插图,非常有帮助! (2认同)

Oli*_*ver 16

如果为每个View Controller选择相同的状态栏颜色:

<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
Run Code Online (Sandbox Code Playgroud)

将此添加到您的Info.plist中,然后根据需要的颜色从Project-> Targets-> Status Bar Style设置状态栏颜色。

另一方面,在您的情况下,您有一个嵌入在视图控制器中的导航控制器。因此,您要为每个页面使用不同的状态栏颜色。

<key>UIViewControllerBasedStatusBarAppearance</key>
<true/>
Run Code Online (Sandbox Code Playgroud)

将其添加到您的Info.plist。然后,为NavigationController创建一个自定义类。之后,您可以实现该方法:

class LightContentNavigationController: UINavigationController {

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

而已!请告诉我这是否有用!


Jef*_*ang 6

如果 Matt 的答案不适合您,请尝试在展示 viewController 之前添加这行代码。

viewController.modalPresentationCapturesStatusBarAppearance = true

我遇到了一个错误,将 modalPresentationStyle 设置为 overFullScreen 不会将状态栏控件提供给所呈现的视图控制器或导航控制器。