【问题标题】:iOS 13 Status Bar GlitchiOS 13 状态栏故障
【发布时间】:2019-09-18 00:06:29
【问题描述】:

在尝试将状态栏颜色从一个视图控制器更改为另一个时,iOS 13 似乎出现了故障。之前的视图控制器会覆盖首选的状态栏样式来点亮内容。在导航到子视图时,我调用如下代码根据界面样式设置状态栏。

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

        }
        return .default
    }

状态栏看起来像这样,一半是亮的,而时间是暗的(应该是这样)。在任意时间后,状态栏将正确绘制。我试过调用 setNeedsStatusBarDisplay()。确实会调用它,但在重新渲染后不能解决问题。 这只发生在 iOS 13 上。已在多台设备上测试

状态栏故障。时间很轻,而电池和网络图标很暗:

提前致谢!

【问题讨论】:

  • “导航到子视图时”是什么意思?提供足够的信息,以便有人可以重现问题。

标签: ios swift ios13


【解决方案1】:

这是我解决此问题的方法:

@interface AHTabBarController : UITabBarController

- (UIViewController *)childViewControllerForStatusBarStyle {

    UINavigationController *navigationController = self.selectedViewController;
    navigationController.navigationBar.barStyle = UIBarStyleDefault; // status bar style

    return navigationController;
}

【讨论】:

    【解决方案2】:

    每次更改 UIWindow.rootViewController 时,我都会遇到相同的状态栏故障。即使在空项目中也可以重现,在 Xcode 11 中从头开始创建并且已经由它正确配置。但在 iOS 12 及更低版本上一切正常。

    我找到了适合我的 iOS 13 解决方案。如果你从 Xcode 10 / iOS 12 更新你的项目,你应该先将 SceneDelegate 添加到项目中(我已经按照this manual 完成了)。然后,在更改根视图控制器之后,您应该立即调用 makeKeyAndVisible:

    if (@available(iOS 13, *)) {
        id<UIWindowSceneDelegate> sceneDelegate = (id<UIWindowSceneDelegate>) UIApplication.sharedApplication.connectedScenes.allObjects.firstObject.delegate;
        [sceneDelegate.window makeKeyAndVisible];
    }
    

    对不起,Objective-C 代码,但 Swift 版本非常相似。

    【讨论】:

      【解决方案3】:

      这不是故障,而是将其设置回默认值

      override var preferredStatusBarStyle: UIStatusBarStyle {
              return self.style
          }
          var style: UIStatusBarStyle = .default
      

      【讨论】:

        【解决方案4】:

        通过将 info.plist 中基于视图控制器的状态栏外观设置为 NO 来修复它。

        <key>UIViewControllerBasedStatusBarAppearance</key>
        <false/>
        

        【讨论】:

        • 这不是修复,这不允许功能存在,通过将布尔值设置为 false
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-18
        • 1970-01-01
        • 1970-01-01
        • 2012-01-28
        • 2014-06-27
        • 2012-08-22
        • 2020-01-16
        相关资源
        最近更新 更多