开发iPhone应用程序。
我有一个非常奇怪的问题,每隔一段时间,应用程序屏幕顶部的状态栏就会变成黑色。不像状态栏的黑色版本,而是像没有文字/图标的纯黑色矩形。这是非常罕见的,但通常似乎是在通过多任务或从锁定的设备(应用程序已在后台运行)返回应用程序后发生的。我已经看到它出现在3GS和iPhone4上。这是一个截图:
在尝试时我永远无法重现它,它似乎最终会在某个时刻发生(有时会发生几天没有发生)。
一旦确实发生,即使状态栏消失,应用程序似乎仍然可以继续正常运行,除非我在应用程序中执行一项特定操作,这将导致所有内容突然冻结(应用程序不会崩溃,但屏幕上的所有内容都是冻结的和非交互式的)。在没有详细解释设计的情况下,导致其冻结的特定操作(在错误出现之后)在后台执行简单的上传到SQL数据库。一旦黑色状态栏出现,重置应用程序是解决问题的唯一方法。
其他人曾经历过这个吗?我无法在任何地方找到解释类似行为的单一线程,这让我疯狂。
答案 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] 而是使用更手动的定义创建框架。如果可行,您可以决定如何从这一点开始。