iOS 13状态栏故障

时间:2019-09-18 00:06:29

标签: ios swift ios13

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

状态栏故障。电池和网络图标不亮时,时间很短: img

谢谢!

4 个答案:

答案 0 :(得分:0)

这不是小故障,可以将其设置回默认值

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

答案 1 :(得分:0)

这是我要解决的问题:

@interface AHTabBarController : UITabBarController

- (UIViewController *)childViewControllerForStatusBarStyle {

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

    return navigationController;
}

答案 2 :(得分:0)

通过将info.plist中基于View控制器的状态栏外观设置为NO来解决此问题。

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

答案 3 :(得分:0)

每次更改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版本非常相似。