繁体   English   中英

iOS 13 状态栏故障

[英]iOS 13 Status Bar Glitch

尝试将状态栏颜色从一个视图控制器更改为另一个视图控制器时,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 上发生。已在多个设备上进行测试

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

提前致谢!

这是我为解决此问题所做的工作:

@interface AHTabBarController : UITabBarController

- (UIViewController *)childViewControllerForStatusBarStyle {

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

    return navigationController;
}

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

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

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

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

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

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

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

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

暂无
暂无

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

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