问题
I want white status bar in my app. For this I set View controller-based status bar appearance
to NO
and Status bar style
to UIStatusBarStyleLightContent
. But now I need to hide status bar in some view controllers. To hide it I have to set View controller-based status bar appearance
to YES
and add - (BOOL)prefersStatusBarHidden {return YES;}
. But status bar is black now. It's black when View controller-based status bar appearance
is YES
and white if NO
. So the question is, how to set white status bar and hide it?
UPD:
code in VC that I want to have white status bar (prefferdSTatusBarStyle
not called)
code in VC with hidden status bar
.plist settings
Result is black status bar, that hides in some VC
UPD2:
I know it's bad to use deprecated methods but with [[UIApplication sharedApplication] setStatusBarHidden:YES];
everything works as I want. If anyone have better solution please let me know.
回答1:
you can set using xcode status bar style is "light"
回答2:
This is the swift version:
To hide the status bar or change it's appearance, you need to override the following properties in your view controller itself
override var prefersStatusBarHidden: Bool{
return true
}
the above hides the status bar and below if you want to set it to white:
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
回答3:
In your plist file add View controller-based status bar appearance
Bool property and set it to YES.
Now in your view controller add the methods like below:
// TO MAKE STATUS BAR WHITE
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return .LightContent
}
// TO MAKE STATUS BAR BLACK
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return .LightContent
}
// RETURN TRUE TO HIDE AND FALSE TO SHOW STATUS BAR
override func prefersStatusBarHidden() -> Bool {
return true
}
For Objective-C
- (BOOL)prefersStatusBarHidden {
return NO;
}
-(UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
For removing redundant code you can make a BaseViewController
as subclass of UIViewController
and add the methods in that class. And override the method in the class which requires change.
回答4:
if your viewcontroller is embedded in UInavigationController then try writing this code in your
-(BOOL)prefreStatusBarHidden
{
return [self.navigationController prefersStatusBarHidden];
}
回答5:
You can do this by setting the navigation background image in your base viewcontroller.
UIImage *bgImage = [UIImage imageNamed:@"bg_navigationbar"];
[self.navigationController.navigationBar setBackgroundImage:bgImage forBarMetrics:UIBarMetricsDefault];
来源:https://stackoverflow.com/questions/41670828/xcode-hide-white-status-bar-ios-10