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?
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With