当尝试将状态栏颜色从一个视图控制器更改为另一个视图控制器时,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上发生。已在多种设备上进行了测试
状态栏故障。电池和网络图标不亮时,时间很短:
谢谢!
答案 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版本非常相似。