Add a UIView
under the status bar and set its backgroundColor
property to the navigation bars barTintColor
How do I change the colour of the status bar when the navigation bar is hidden in iOS 7?
-
27-09-2022 - |
문제
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?
해결책 3
다른 팁
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.
set self.tableView.contentInset = UIEdgeInsetsZero
after self.navigationController?.navigationBarHidden = true
This fixed my issue:
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}