在显示UIWindow覆盖UIStatusBar后,UIStatusBarStyle会发生变化。

21

我正在UIStatusBar上方显示一个UIWindow, 默认情况下,UIStatusBarStyle设置为UIStatusBarStyleLightContent,但当我显示UIWindow时,UIStatusBarStyle会切换到黑色样式。


请检查此链接:http://stackoverflow.com/questions/19671359/uistatusbar-changes-style-for-no-apparent-reason/19674047#19674047 - Dhaval Bhadania
@David G. 你解决了吗? - Peymankh
4个回答

16

我在遇到同样的问题时发现了这个主题。你需要做的是创建一个新的视图控制器,并将其设置为你要显示在其他视图上方的 UIWindow 的根视图控制器。然后,在这个新的视图控制器中像这样实现 preferredStatusBarStyle 方法:

- (UIStatusBarStyle) preferredStatusBarStyle {
    return UIStatusBarStyleLightContent;
}

或者,您可以在Info.plist中将“View controller-based status bar appearance”属性设置为NO,并实现Azabella建议的[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]方法。但是,这会将所有视图的状态栏都设置为白色。如果这不是问题,那么就没有必要创建一个单独的视图控制器来设置preferredStatusBarStyle方法。


在我的情况下,我分配了一个新的UIWindow来显示一个内容,覆盖所有视图,包括状态栏,然后我使用setNeedsStatusBarAppearanceUpdate从未再次调用preferredStatusBarStyle。然后我无法更改状态栏颜色。有什么建议吗? - rafaeljuzo
你是否按照上述建议为这个新的UIWindow创建了一个根视图控制器? - Tuslareb
我还需要将prefersStatusBarHidden重写为false,否则状态栏将被隐藏。 - David Riha

1
这是一个相当简单的问题,我发现将 modalPresentationCapturesStatusBarAppearance 设置为 true 即可解决。

你会在哪里设置modalPresentationCapturesStatusBarAppearance来防止叠加的UIWindow捕获状态栏外观? - Sebastian Kirsche

1
你是否在你的AppName-Info.plist文件中将"View controller-based status bar appearance"属性设置为NO?

0

添加此代码,以便在视图出现时设置颜色/样式

-(void)viewDidAppear:(BOOL)animated {

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接