preferredStatusBarStyle var在iOS12中不起作用?

时间:2018-09-22 02:26:16

标签: xcode10 ios12

添加

application.statusBarStyle = .lightContent

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

override var preferredStatusBarStyle: UIStatusBarStyle {
    return UIStatusBarStyle.lightContent
}

到VC不再在iOS12 / Xcode10上工作

有什么想法吗?

4 个答案:

答案 0 :(得分:20)

这与iOS 12无关。您只是错了规则。

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

令人惊奇的是,它是由导航栏的barStyle确定的。要获取灯光状态栏文本,请说(在您的视图控制器中):

self.navigationController?.navigationBar.barStyle = .black

很难相信,但事实如此。多年前,我直接从Apple获得此信息。

您还可以在情节提要中执行此设置。

示例!导航栏的栏样式为.default

enter image description here

导航栏的栏样式为.black

enter image description here

答案 1 :(得分:8)

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

<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>

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

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

<key>UIViewControllerBasedStatusBarAppearance</key>
<true/>

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

class LightContentNavigationController: UINavigationController {

    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }
}

就这样!请告诉我这是否有用!

答案 2 :(得分:1)

如果 Matt 的回答对您不起作用,请在展示您的 viewController 之前尝试添加这行代码。

viewController = modalPresentationCapturesStatusBarAppearance = true

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

答案 3 :(得分:0)

我为 UITabBarController 的每个标签使用导航控制器。子类化 UINavigationController 和覆盖 childForStatusBarStyle 为我解决了这个问题。

class MyNavigationController: UINavigationController {
    open override var childForStatusBarStyle: UIViewController? {
        return topViewController?.childForStatusBarStyle ?? topViewController
    }
}