添加
application.statusBarStyle = .lightContent到我的AppDelegate的didFinishLaunchingWithOptions方法中,也不添加
override var preferredStatusBarStyle: UIStatusBarStyle {
return UIStatusBarStyle.lightContent
}不再在iOS12 12/Xcode10 10上工作。
有什么想法吗?
发布于 2018-09-22 14:18:49
这与iOS 12无关,你只是规则错了。
在导航控制器的情况下,状态栏的颜色不是由视图控制器的preferredStatusBarStyle决定的。
令人惊讶的是,它是由导航栏的barStyle确定的。要获得轻量级状态栏文本,例如(在您的视图控制器中):
self.navigationController?.navigationBar.barStyle = .black很难相信,但是真的。几年前,我直接从苹果那里得到了这个信息。
还可以在情节提要中执行此设置。
举个例子!导航栏的条形样式是.default

导航栏的条形样式是.black

注意:对于iOS 13,只要您不使用大标题或UIBarAppearance,这在iOS 13中仍然有效。但基本上,您应该停止这样做,让状态栏的颜色是自动的,因为用户选择的光或暗模式。
发布于 2018-09-22 13:15:37
如果为每个视图控制器选择相同的状态栏颜色:
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>广告到您的Info.plist,并设置状态栏颜色从项目->目标->状态栏样式所需的颜色。
另一方面,在您的示例中,您有一个嵌入在视图控制器中的导航控制器。因此,您希望为每个页面设置不同的状态栏颜色。
<key>UIViewControllerBasedStatusBarAppearance</key>
<true/>把这个贴到你的Info.plist上。然后,为您的NavigationController创建一个自定义类。之后,您可以实现该方法:
class LightContentNavigationController: UINavigationController {
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
}就这样!请告诉我这是否有用!
发布于 2021-05-26 16:40:38
如果Matt的答案不适用于您,请在显示viewController之前尝试添加这一行代码。
viewController = modalPresentationCapturesStatusBarAppearance = true
我遇到了一个错误,将modalPresentationStyle设置为overFullScreen不能将状态栏控件提供给呈现的视图控制器或导航控制器。
https://stackoverflow.com/questions/52452979
复制相似问题