iOS 13 状态栏样式



我想在 iOS 13 上更改每个视图控制器级别的状态栏样式。到目前为止,我没有任何运气。
我将UIUserInterfaceStyle定义为 info.plist 中的Light(因为我不想支持暗模式(并将UIViewControllerBasedStatusBarAppearance设置为true.preferredStatusBarStyle在我的视图控制器上被调用,但完全被忽略。UIUserInterfaceStyle似乎总是覆盖 VC 首选项。 如何在 iOS 13 上获得每视图控制器状态栏样式?还是不再支持它?

iOS 13.2, Swift 5.1

对我来说,前面提到的解决方案没有任何效果。5小时后,我最终 模态演示捕获状态栏外观标志 。

destinationNavigationController.modalPresentationCapturesStatusBarAppearance = true
sourceViewController.present(destinationNavigationController, animated: animated, completion: nil)

在此之后,preferredStatusBarStyle被召集到呈现的VC中。

override var preferredStatusBarStyle: UIStatusBarStyle {
if #available(iOS 13.0, *) {
if traitCollection.userInterfaceStyle == .light {
return .darkContent
} else {
return .lightContent
}
} else {
return .lightContent
}
}

我在 iOS13 上遇到了同样的问题,而我的应用程序在 iOS12 上很好。我有一个 TabBarController 它容纳 3 个 NavigationBarController,我展示了来自以前的 ViewController 的 TabBarController。我通过在演示时将 .modalPresentationStyle 设置为 .fullScreen 来修复它:

tabbarController.modalPresentationStyle = .fullScreen

也许它会以某种方式帮助你...

在iOS13中,UIStatusBarStyle现在有一个.darkContent选项。对于黑色文本,请使用此选项(而不是 .default(作为首选状态栏样式。

就我而言,我遇到了类似的错误UIStatusBarStyle问题。对于我的应用程序中的某些视图控制器,我需要设置一个深色状态栏样式,忽略当前的系统颜色模式。问题是我使用了.default值,但在 iOS 13 中它会根据上下文而变化。这就是为什么我添加了一个小的解决方法来处理iOS 12和iOS 13 +案例的原因。

private extension UIStatusBarStyle {
static var darkContentWorkaround: UIStatusBarStyle {
if #available(iOS 13.0, *) {
return .darkContent
} else {
return .default
}
}
}

我在 iOS 13 上使用导航控制器时遇到了同样的问题,我能够使用

let navBarAppearance = UINavigationBarAppearance((

导航栏.滚动边缘外观 = 导航栏外观

但问题是当我使用当前控制器时,状态栏没有改变我在顶视图控制器上使用此代码

override func viewDidAppear(_ animated: Bool( {

if #available(iOS 13, *)
{
let statusBar = UIView(frame: (UIApplication.shared.keyWindow?.windowScene?.statusBarManager?.statusBarFrame)!)
statusBar.backgroundColor = UIColor.systemBackground
UIApplication.shared.keyWindow?.addSubview(statusBar)
}
}

您可以在"UIColor.systemBackground"中使用您的颜色

最新更新