1

大家一天中的美好时光!iOS 7 以许多不那么有趣和不那么记录的“功能”欢迎我们,尤其是在外观定制方面。我的问题如下:

我在我的应用程序 plist 中将“基于控制器的状态栏外观”设置为“是”,现在如何以编程方式获取当前状态栏样式?旧代码如

[UIApplication sharedApplication].statusBarStyle

总是返回 UIStatusBarStyleDefault 忽略视图控制器的样式。

为了防止将来产生误解:我无意让 statusBarStyle 属性工作,我正在寻找打开“基于控制器的状态栏外观”的新方法。请从“建议”中顽固地将其关闭。

4

4 回答 4

2

找到我的答案...如果基于视图控制器的状态栏外观打开,你应该得到这样的风格:

[[[[UIApplication sharedApplication] keyWindow] rootViewController] preferredStatusBarStyle]

并且您应该考虑诸如导航/标签栏控制器之类的事情。如果你有自己的,你可以做以下事情。

- (UIStatusBarStyle) preferredStatusBarStyle
{
    return [[ self selectedViewController] preferredStatusBarStyle];
}

对于您的标签栏控制器的子类和

- (UIStatusBarStyle) preferredStatusBarStyle
{
    return [[self visibleViewController] preferredStatusBarStyle];
}

用于标签栏控制器。

于 2013-10-25T14:03:43.947 回答
2

尝试这个..

 UIStatusBarStyle style=[[UIApplication sharedApplication] statusBarStyle];
于 2013-10-21T06:50:58.003 回答
1

UIWindow我在不知道当前哪个视图控制器负责状态栏样式的情况下使用覆盖,因此无法使用其他解决方案。对我有用的是

UIApplication.shared.keyWindow?.rootViewController?
     .childViewControllerForStatusBarStyle.preferredStatusBarStyle

文档说的是什么:

当系统需要视图控制器用于确定状态栏样式时调用。

于 2018-02-15T16:31:08.457 回答
0

这对我有用,我想使用presentingViewController's StatusBar 样式,

- (UIStatusBarStyle) preferredStatusBarStyle
{
    return [self.presentingViewController preferredStatusBarStyle];
}
于 2015-11-05T15:12:53.720 回答