iOS - 状态栏随机变为纯黑色

时间:2011-02-24 22:56:06

标签: iphone ios statusbar uistatusbar

开发iPhone应用程序。

我有一个非常奇怪的问题,每隔一段时间,应用程序屏幕顶部的状态栏就会变成黑色。不像状态栏的黑色版本,而是像没有文字/图标的纯黑色矩形。这是非常罕见的,但通常似乎是在通过多任务或从锁定的设备(应用程序已在后台运行)返回应用程序后发生的。我已经看到它出现在3GS和iPhone4上。这是一个截图:

enter image description here

在尝试时我永远无法重现它,它似乎最终会在某个时刻发生(有时会发生几天没有发生)。

一旦确实发生,即使状态栏消失,应用程序似乎仍然可以继续正常运行,除非我在应用程序中执行一项特定操作,这将导致所有内容突然冻结(应用程序不会崩溃,但屏幕上的所有内容都是冻结的和非交互式的)。在没有详细解释设计的情况下,导致其冻结的特定操作(在错误出现之后)在后台执行简单的上传到SQL数据库。一旦黑色状态栏出现,重置应用程序是解决问题的唯一方法。

其他人曾经历过这个吗?我无法在任何地方找到解释类似行为的单一线程,这让我疯狂。

4 个答案:

答案 0 :(得分:2)

我在我的应用程序中发生过一次,当我在UIView实例的自定义子类中调用绘图方法之前,我将其作为子视图添加到父视图中。

解决方案显然很简单:在发送/调用任何自定义绘图方法之前,首先将其添加为子视图。

示例:

CustomView *aView = [[CustomView alloc] init];

[aView drawSomething];

[self.view addSubview:aView]; //wrong approach
[aView release];

应该是:

CustomView *aView = [[CustomView alloc] init];

[self.view addSubview:aView];
[aView release];

[aView drawSomething];

答案 1 :(得分:0)

缺少屏幕截图,但您所描述的内容听起来好像您错误地使用了Apple的内置视图控制器。

UINavigationController和UITabBarController将自动将其中的所有内容向下移动20个像素,如果他们检测到此时“屏幕上有状态栏”。

我的猜测是你有一些代码正在删除状态栏,但是在Apple代码已经检测到并将所有内容都移到了适应位置之后,这些代码就开始了。

“修复”是非常仔细地重新阅读Apple课程中的文档并将其用作Apple指令(通常,人们以看似合理的方式使用它们 - 例如将它们嵌入到其他视图中 - 但Apple明确宣称很遗憾,那些来自Apple的课程非常脆弱。

答案 2 :(得分:0)

您是否持有对QLPreviewController实例的引用?每当我需要以模态方式显示文件时,我就可以通过创建一个新的自动释放QLPreviewController来解决我的应用中的这个问题,而不是一遍又一遍地重复使用同一个实例。

答案 3 :(得分:0)

我有一个类似的问题,我在这个问题中描述了here

如果您有,请尝试删除通过引用创建的任何CGRect框架:     [UIScreen mainScreen] .applicationFrame] 而是使用更手动的定义创建框架。如果可行,您可以决定如何从这一点开始。