iOS 13状态栏样式

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

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

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

tabbarController.modalPresentationStyle = .fullScreen

也许它会对你有所帮助…

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

让navBarAppearance=UINavigationBarAppearance()

navigationBar.scrollEdgeAppearance=navBarAppearance

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

覆盖函数视图显示(u动画:Bool){


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

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

private extension UIStatusBarStyle {

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

}

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

iOS13.2,Swift 5.1

对我来说,前面提到的解决方案都不起作用。5个小时后,我在 旗帜

在这之后,
preferredStatusBarStyle
presentedVC中被调用

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

它应该可以工作。plist中的一个在加载应用程序之前使用(当显示启动屏幕时)。对于每个视图控制器,其余部分应使用
preferredStatusBarStyle
定义。请注意,只有俯视图控制器重要,而不是嵌入式控制器。因此,它将与您当前的控制器一起工作,但与控制器不一起工作。例如,按下导航控制器。要使导航控制器也工作,您需要子类将其转发设置。这在plist中根本没有设置任何选项。这些是默认设置。是的,它位于保存NavigationBarController的TabBarController中,但我已经有了扩展来处理这个问题。
extension UIAbbarController{open override var childForStatusBarStyle:UIViewController?{返回selectedViewController?.childForStatusBarStyle??selectedViewController}}扩展UINavigationController{打开覆盖变量childForStatusBarStyle:UIViewController?{返回topViewController?.childForStatusBarStyle??topViewController}
正如我所说,调用了
preferredStatusBarStyle
,但忽略了它。@MaticOblak问题的症结在于当您以模态方式切换到ViewController(或NavController)时这不是全屏,iOS 13的模态卡用户界面也是如此。现在状态栏由苹果控制的视图控制器所有,因此没有办法对其进行子类化!我们当时如何控制状态栏的亮/暗?该视图控制器尝试跟随暗模式,而不管我做什么。我面临着同样的问题-你设置好了吗g AppDelegate中的窗口?我实现了一个SceneDelegate,状态栏现在可以正常工作。问题是这意味着我有很多可用的
。(iOS 13.0,*)
code和我必须再次实现AppDelegate方法。这是可行的,但现在状态栏的颜色与导航栏的颜色不同,只有ios 12具有相同的颜色,plzhelp@famfamfam在ios13中,apple更改状态栏颜色的工作方式,在ios13中,状态栏选择导航栏的颜色。您可以使用以下代码保持相同的颜色。如果#可用(iOS 13.0,*){let navBarAppearance=UINavigationBarAppearance()navBarAppearance.configureWithOpaqueBackground()navBarAppearance.backgroundColor=UIColor。“YourColor”navBarAppearance.shadowColor=nil navigationBar.standardAppearance=navBarAppearance navigationBar.scrollEdgeAppearance=navBarAppearance}
modalPresentationCapturesStatusBarAppearance=true
拯救了我的一天!@Bezodam我也在尝试同样的方法。但是当我的vc出现在模型上时,我仍然无法看到状态栏。在我关闭vc后,我可以在主屏幕上看到黑色的状态栏。但是我用导航栏来显示。不仅用vcNothing为我。在Info.plist中,我需要什么?我呈现全屏。我希望状态栏总是亮的(因为我有一个黑色视图)有什么建议吗?谢谢你很友好ModalPresentationCaptureStatusBarAppearance=true也是我的问题的关键。在我的情况下,我直接在演示的VC中设置它。这就是我需要在不支持黑暗模式的应用程序中正确设置状态栏的原因!
    destinationNavigationController.modalPresentationCapturesStatusBarAppearance = true
    sourceViewController.present(destinationNavigationController, animated: animated, completion: nil)
override var preferredStatusBarStyle: UIStatusBarStyle {
    if #available(iOS 13.0, *) {
        if traitCollection.userInterfaceStyle == .light {
            return .darkContent
        } else {
            return .lightContent
        }
    } else {
        return .lightContent
    }
}