尽管将 UIViewControllerBasedStatusBarAppearance 设置为 NO,但 iPad mini 上的状态栏仍可见

Posted

技术标签:

【中文标题】尽管将 UIViewControllerBasedStatusBarAppearance 设置为 NO,但 iPad mini 上的状态栏仍可见【英文标题】:Status bar visible on iPad mini despite setting UIViewControllerBasedStatusBarAppearance to NO 【发布时间】:2014-04-22 13:21:02 【问题描述】:

我有一个将 UIViewControllerBasedStatusBarAppearance 设置为 NO 的 iPhone 应用程序。在我测试过的任何设备(iPhone 4、5、5s、5c、iPad 4ish)上,状态栏都不可见。 iPad mini(第一代)除外。 使用 ios SDK 是 7.1。

状态栏在第一代 iPad mini 上可见。我希望状态栏也会在此设置中隐藏。

我什至尝试将[[UIApplication sharedApplication] setStatusBarHidden:NO]; 添加到didFinishLaunchingWithOptions,但这并没有改变任何东西。

状态栏样式也设置为“在应用程序启动期间隐藏”。

iPad mini 运行 iOS 7.1。

是的,这是一个边缘案例,但这次我无法得到预期的结果。

还有一点信息:我正在使用 cocos2d-iphone v2.1。以前从未遇到过这个问题,因为我已经发布了一堆具有相同引擎的应用程序。 我开始认为这是与组合相关的错误:iOS 7.1 和 iPad mini。

这是设置:

【问题讨论】:

你在.plist中试过了吗? 这是 plist 是的。 在 .plist '查看基于控制器的状态栏外观'中尝试这个关键字并将 bool 设置为 NO。不是'UIViewControllerBasedStatusBarAppearance' sathiamoorthy: 是一样的。 是的,一样。就让我们试试吧。 【参考方案1】:

我遇到了同样的问题,我想解释一下。

仅当您在 iPad 上启动 iPhone(仅限)应用程序时才会出现此问题。如果应用是通用的,就不会有任何问题。 最烦人的行为是在没有 Retina 显示屏的 iPad 上使用仅限 iPhone 的应用程序。因为状态栏会覆盖应用程序的顶部。


我的 plist 文件:


仅限 iPhone 的应用程序

iPhone

iPad:

iPad 视网膜:


通用应用

iPhone:

iPad:

iPad 视网膜:

【讨论】:

感谢您的漂亮运行。我应该在有时间的时候报告这个错误...... 您找到解决此问题的方法了吗?完全符合您的描述。 但是使用这个我看不到 UIStatusBarStyleLightContent。有人可以帮忙吗?【参考方案2】:

这是 iPad Mini iOS 7.1 版中的一个错误。

以典型的方式,他们修复了一个问题(空白状态栏)并创建了另一个问题。

请务必将错误报告给 Apple。

【讨论】:

【参考方案3】:

您应该将“基于视图控制器的状态栏外观”设置为“是”,并且在您要隐藏的每个视图中调用此方法。最好为您的视图创建一个基本视图控制器并调用一次。

- (BOOL)prefersStatusBarHidden 
    return YES;

【讨论】:

这听起来很奇怪。自从此设置出现以来,我一直将其设置为 NO。即使我现在将其设置为 YES,我将如何“调用”prefersStatusBarHidden? prefersStatusBarHidden 听起来像是 iOS 会调用的东西。 “查看基于控制器的状态栏外观”键告诉系统“我将处理状态栏的可见性”。之后,您可以覆盖 prefersStatusBarHidden 方法。 好的,我试试看。 长话短说,这个答案的理论是“正确的”,UIViewControllerBasedStatusBarAppearance 设置为 YES 询问“prefersStatusBarHidden”中关于状态栏外观的视图。如果我不在那里返回 YES,这将对我产生相反的效果。所以我将其设置为 YES 以隐藏状态栏。它适用于我测试过的设备(iPhone 5,一开始没有问题),但不适用于 iPad mini。我开始认为这是 iPad mini 中的一个错误...... 是的,这是做同样事情的另一种方法,所以它可能是一个错误,你最好报告它。【参考方案4】:
<key>UIStatusBarHidden</key>
    <true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
    <false/>

尝试将其设置到您的 info.plist 文件中。

【讨论】:

【参考方案5】:

我有一个解决方法。添加以下内容:

- (UIStatusBarStyle) preferredStatusBarStyle 
    return -1;

无论你在哪里:

- (BOOL)prefersStatusBarHidden 
    return YES;

这显然很糟糕,但它似乎对我有用——至少到目前为止。

我注意到这会导致如下输出:

<Error>: CGContextRestoreGState: invalid context 0x0. This is a serious error. This application, or a library it uses, is using an invalid context  and is thereby contributing to an overall degradation of system stability and reliability. This notice is a courtesy: please fix this problem. It will become a fatal error in an upcoming update.

我找到了另一种解决方法,这个错误可能是导致这种解决方法起作用的原因,所以我坚持使用它,但值得注意。

【讨论】:

以上是关于尽管将 UIViewControllerBasedStatusBarAppearance 设置为 NO,但 iPad mini 上的状态栏仍可见的主要内容,如果未能解决你的问题,请参考以下文章

尽管函数执行正确,但“将循环结构转换为 JSON”错误

尽管有斜线,但查询将 http 重写为 https?

尽管映射,Ivy makepom 将所有依赖项标记为可选

SASS 将样式应用于整个网站,尽管仅导入到单个页面中

尽管将 Python multiprocessing.Lock 作为目标函数参数传递,但在并行化时为无

尽管数据看似合适,但插入时“字符串或二进制数据将被截断”