iOS 13状态栏样式

时间:2019-08-22 11:51:53

标签: ios swift uistatusbar ios13

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

5 个答案:

答案 0 :(得分:2)

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

tabbarController.modalPresentationStyle = .fullScreen

也许它将以某种方式帮助您...

答案 1 :(得分:2)

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

答案 2 :(得分:2)

iOS 13.2,Swift 5.1

对我来说,前面提到的解决方案无济于事。 5个小时后,我结束了 modalPresentationCapturesStatusBarAppearance标志。

    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
    }
}

答案 3 :(得分:0)

就我而言,我遇到了类似的问题,错误的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
        }
    }

}

答案 4 :(得分:-1)

在使用导航控制器的同时,我在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”中使用颜色