繁体   English   中英

iOS 13 状态栏样式

[英]iOS 13 status bar style

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

iOS 13.2,斯威夫特 5.1

对我来说,之前提到的解决方案没有任何效果。 5 小时后,我结束了modalPresentationCapturesStatusBarAppearance flag 。

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

呈现的VC 中调用了这个preferredStatusBarStyle之后。

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

我在 iOS13 上遇到了同样的问题,而在 iOS12 上我的应用程序没问题。 我有一个包含 3 个 NavigationBarController 的 TabBarController,并且我从以前的 ViewController 中呈现 TabBarController。 我通过在演示时将 .modalPresentationStyle 设置为 .fullScreen 来修复它:

tabbarController.modalPresentationStyle = .fullScreen

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

在 iOS13 中,UIStatusBarStyle 现在有一个 .darkContent 选项。 对于黑色文本,使用这个(而不是 .default)作为 preferredStatusBarStyle。

就我而言,我遇到了类似的问题,不正确的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 上遇到了同样的问题,我能够使用更改状态栏颜色

让 navBarAppearance = UINavigationBarAppearance()

navigationBar.scrollEdgeAppearance = navBarAppearance

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

覆盖 func viewDidAppear(_ 动画:布尔){

    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”中使用您的颜色

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM