问题
In ios7, how can I hide the statusbar programmatically? I am using XCode 4.6.1
(ios6.1) and I want to implement this in XCode itself.
回答1:
in iOS7 you should implement in your viewController
- (BOOL)prefersStatusBarHidden {
return YES;
}
回答2:
you can hide status bar to set the key value "View controller-based status bar appearance" NO in plist. This is easiest way.
or You can hide in code by using property statusBarHidden of UIApplication class.
[[UIApplication sharedApplication] setStatusBarHidden:YES];
Swift 3.0
Hide status bar for any particular view controller
override var prefersStatusBarHidden: Bool {
get {
return true
}
}
Hide Status bas across the application
UIApplication.shared.isStatusBarHidden = true
and set the key value "View controller-based status bar appearance" NO in info plist of project.
回答3:
- (void)viewDidLoad
{
[super viewDidLoad];
if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)])
{
[self prefersStatusBarHidden];
[self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
}
else
{
// iOS 6
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
}
}
// Add this method
- (BOOL)prefersStatusBarHidden {
return YES;
}
回答4:
To hide for a specific ViewController (and then turn back on) when View controller-based status bar appearance
set to NO
:
-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];
}
-(void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade];
}
回答5:
If you need to hide/show it on a given view controller dynamically you can do something like this.
(Although I recommend just using - (BOOL)prefersStatusBarHidden
to return your preference if you don't need it to change.)
// view controller header
@interface MyViewController : UIViewController {
BOOL shouldHideStatusBar;
}
@end
@implementation
- (BOOL)prefersStatusBarHidden {
return shouldHideStatusBar; // backed by your instance variable
}
- (void)setPrefersStatusBarHidden:(BOOL)hidden {
shouldHideStatusBar = hidden;
// Don't call this on iOS 6 or it will crash since the
// `setNeedsStatusBarAppearanceUpdate` method doesn't exist
[self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
// [self setNeedsStatusBarAppearanceUpdate]; // (if Xcode 5, use this)
}
@end
回答6:
In case of iOS >= 7.0 use following code :
Syntax:
// Present in UIViewController of UIKit Frameworks
- (BOOL)prefersStatusBarHidden NS_AVAILABLE_IOS(7_0); // Defaults to NO
Usage:
- (BOOL)prefersStatusBarHidden {
return YES;
}
In iOS < 7.0 use following code :
Syntax:
// Present in UIApplication of UIKit Frameworks
- (void)setStatusBarHidden:(BOOL)hidden withAnimation:(UIStatusBarAnimation)animation NS_AVAILABLE_IOS(3_2);
Usage:
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
回答7:
Swift 4.1
step1. Set View controller-based status bar appearance
in your info.plist
to YES
step2. Type some code in your UIViewController
, status bar will hide when you present the UIViewController
.
private var statusBarIsHidden = false
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
statusBarIsHidden = true
setNeedsStatusBarAppearanceUpdate()
}
override var prefersStatusBarHidden: Bool {
return statusBarStatus
}
回答8:
Try this
[[UIApplication sharedApplication] setStatusBarHidden:YES];
回答9:
If anyone wanted the most updated way to do it (Swift 2.1 and latest Xcode 7.2)
Set "View controller based status bar appearance to NO in your info.plist"
UIApplication.sharedApplication().statusBarHidden = true // put inside app delegate somewhere (applicationWill or DidFinishLaunchingWithOptions:
回答10:
My experience is that you need both the code and the value in the info.plist file in iOS 9 / Xcode 7.3.
Add this to your viewDidLoad method.
[[UIApplication sharedApplication] setStatusBarHidden:YES];
Add this to your info.plist file as a boolean value and set it to NO:
View controller-based status bar appearance
回答11:
If using iOS 9.0+ and Swift. If you want to have status bar hidden in some view controllers but not all - make sure to have View controller-based status bar appearance
value in Info.plist
set to YES
else same parameters will be used across all view controllers.
And override prefersStatusBarHidden
in subclass of UIViewController
override var prefersStatusBarHidden: Bool {
get {
return true
}
}
Similar can be done to change preferredStatusBarStyle
override var preferredStatusBarStyle: UIStatusBarStyle {
get {
return .lightContent
}
}
回答12:
on swift 4:
UIApplication.shared.isStatusBarHidden = ..true/false
来源:https://stackoverflow.com/questions/19067899/how-to-hide-the-status-bar-programmatically-in-ios-7