iOS - status bar randomly turns solid black

2.6k Views Asked by At

Developing an iPhone app.

I've got a really strange problem where, every once in a while, the status bar at the top of my app screen will turn solid black. Not like the black version of the status bar, but like a solid black rectangle with NO text/icons. It's very rare, but usually seems to occur after returning to the app via multi-tasking or from a locked device (the app has been running in the background). I've seen it occur on both 3GS and iPhone4. Here's a screenshot:

enter image description here

I can never reproduce it when trying, it just seems to eventually happen at some point (sometimes it will go for days without happening).

Once it does occur, the app seems to continue functioning fine, even with the status bar gone, except for when I do one specific action in the app which will cause everything to freeze up all the sudden (the app doesn't crash, but everything on screen is frozen and non-interactive). Without explaining the design in detail, the specific action that causes it to freeze up (after the bug appears) is performing a simple upload in the background to a SQL database. Resetting the app is the only way to fix the problem once the black status bar appears.

Anyone else ever experienced this? I can't find a single thread anywhere explaining similar behavior, and it's driving me nuts.

4

There are 4 best solutions below

3
On

The screenshot is missing, but what you describe sounds as though you've incorrectly implemented the use of Apple's built-in view controllers.

Both UINavigationController and UITabBarController will automagically shift all the content inside them down by 20-pixels, if they detect there is "supposed" to be a statusbar on screen at the moment.

My guess is that you have some code that is removing the statusbar, but which is kicking-in after the Apple code has already detected it and shifted everything down to accomodate.

The "fix" is to re-read the docs on Apple's classes very carefully and use them as Apple dictates (usually, people use them in ways that seem sensible - e.g. embedding them inside other views - but which Apple has expressly declared are unsupported. Sadly those classes from Apple are very fragile)

2
On

Are you holding a reference to a QLPreviewController instance? I was able to solve this problem in my app by creating a new autoreleased QLPreviewController whenever I need to display a file modally, as opposed to reusing the same instance over and over again.

0
On

It happened once in my app when I called a drawing method in my custom subclass of UIView instance right before I added it as a subview to parent view.

The solution was apparently easy: add it as a subview first before sending/calling any custom drawing methods.

Examples:

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

[aView drawSomething];

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

Should be:

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

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

[aView drawSomething];
0
On

I had a similar problem, which I described in this question here

If you have any, try removing any CGRect frame created by reference to: [UIScreen mainScreen].applicationFrame] and instead create the frame using a more manual definition. If that works, you can decide how to proceed from that point.