Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I change the colour of the status bar when the navigation bar is hidden in iOS 7?

I am aware of how to change the colour of a navigation bar (and status bar) by doing this:

self.navigationController.navigationBar.barTintColor = [UIColor redColor];

But when I hide my navigation bar, the status bar color reverts back to transparent color.

How do I keep the status bar color the same as the barTintColor even when the navigation bar is hidden?

like image 338
Enrico Susatyo Avatar asked Jan 14 '14 07:01

Enrico Susatyo


2 Answers

This did the trick for me (in Swift):

let statusBarBGView = UIView(frame: UIApplication.sharedApplication().statusBarFrame)
statusBarBGView.backgroundColor = .whiteColor() //color of your choice
view.addSubview(statusBarBGView)

My problem was I had set my navigationBar to be hidden, which left the statusBar's background to be clear. This resulted in my tableView cells showing behind the statusBar as they were scrolled.

like image 55
vikzilla Avatar answered Oct 05 '22 12:10

vikzilla


You simply add a UIView to the current view with the correct statusBar measurements and then change the color.

Here's some sample code. First get the status bar's frame:

 //The statusBarFrame returns the frame in screen coordinates. I believe the correct way to get what this corresponds to in view coordinates is to do the following:
- (CGRect)statusBarFrameViewRect:(UIView*)view 
{
    CGRect statusBarFrame = [[UIApplication sharedApplication] statusBarFrame];
    CGRect statusBarWindowRect = [view.window convertRect:statusBarFrame fromWindow: nil];
    CGRect statusBarViewRect = [view convertRect:statusBarWindowRect fromView: nil];
    return statusBarViewRect;
}
//source: http://stackoverflow.com/questions/3888517/get-iphone-status-bar-height

Then create your view in the viewDidload method or whenever you hide your navigation bar with the following code:

UIView *statusBarUnderLay = [[UIView alloc] initWithFrame:[self statusBarFrameViewRect:self.view]];
[statusBarUnderLay setBackgroundColor:[UIColor yellowColor]];
[self.view addSubview:statusBarUnderLay];

and voila

like image 21
Pavan Avatar answered Oct 05 '22 11:10

Pavan