Question

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?

Was it helpful?

Solution 3

Add a UIView under the status bar and set its backgroundColor property to the navigation bars barTintColor

OTHER TIPS

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.

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

My solution was simple setting the background color of the viewcontrollers' view. e.g.

[self.view setBackgroundColor:[UIColor blackColor]];

Adding a view needs to be handled for cases when the OS chooses not to show the status bar.

I found a simple way to solve the problem using InterfaceBuilder. My problem is like this, there is an annoy white gap, after a hide the navigation bar.

[Before[1]

then I uncheck these two options

options

then It works

after## Heading ##

set self.tableView.contentInset = UIEdgeInsetsZero after self.navigationController?.navigationBarHidden = true

This fixed my issue:

- (UIStatusBarStyle)preferredStatusBarStyle
{
    return UIStatusBarStyleLightContent;
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top