尽管将 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 上的状态栏仍可见的主要内容,如果未能解决你的问题,请参考以下文章