Reputation: 19800
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?
Upvotes: 5
Views: 4530
Reputation: 18548
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
Upvotes: 6
Reputation: 7307
This fixed my issue:
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
Upvotes: 0
Reputation: 174
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.
Upvotes: 2
Reputation: 4138
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.
Upvotes: 6
Reputation: 513
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.
[
then I uncheck these two options
then It works
Upvotes: 1
Reputation: 330
set self.tableView.contentInset = UIEdgeInsetsZero
after self.navigationController?.navigationBarHidden = true
Upvotes: 0
Reputation: 3089
Add a UIView
under the status bar and set its backgroundColor
property to the navigation bars barTintColor
Upvotes: 2