添加
application.statusBarStyle = .lightContent
添加到我的AppDelegate的didFinishLaunchingWithOptions方法中,也没有添加
override var preferredStatusBarStyle: UIStatusBarStyle {
return UIStatusBarStyle.lightContent
}
到VC不再在iOS12 / Xcode10上工作
有什么想法吗?
答案 0 :(得分:20)
这与iOS 12无关。您只是错了规则。
在导航控制器情况下,状态栏的颜色不是由视图控制器的preferredStatusBarStyle
确定的。
令人惊奇的是,它是由导航栏的barStyle
确定的。要获取灯光状态栏文本,请说(在您的视图控制器中):
self.navigationController?.navigationBar.barStyle = .black
很难相信,但事实如此。多年前,我直接从Apple获得此信息。
您还可以在情节提要中执行此设置。
示例!导航栏的栏样式为.default
:
导航栏的栏样式为.black
:
答案 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
}
}