可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
In my iOS video app status bar is hidden in some view controllers. I have done this using following code.
[[UIApplication sharedApplication] setStatusBarHidden:YES];
It works for iOS 5 and iOS 6 , but not in iOS 7.
I tried with this in particular view controller,
Eg:
-(BOOL)prefersStatusBarHidden { return YES; }
It works well, but I cant show status bar again in the parent view controller.
回答1:
You should add this value to plist: "View controller-based status bar appearance" and set it to "NO".
回答2:
Add the following to your Info.plist:
<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
回答3:
Add following line in viewdidload
[[UIApplication sharedApplication] setStatusBarHidden:YES
withAnimation:UIStatusBarAnimationFade];
and add new method
- (BOOL)prefersStatusBarHidden {
return YES;
}
also change info.plist file
View controller-based status bar appearance" = NO
its works for me
回答4:
In the Plist add the following properties.
Status bar is initially hidden = YES
View controller-based status bar appearance = NO
now the status bar will hidden.
回答5:
Try this simple method:
Objective-C:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated]
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated]
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
}
Swift:
override func viewWillAppear(animated: Bool)
{
super.viewWillAppear(animated)
UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: UIStatusBarAnimation.None)
}
override func viewWillDisappear(animated: Bool)
{
super.viewWillDisappear(animated)
UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.None)
}
回答6:
I did the following and it seems to work (even in iOS 8):
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) {
[[UIApplication sharedApplication] setStatusBarHidden:YES];
}
}
- (BOOL)prefersStatusBarHidden {
return YES;
}
回答7:
- UIApplication.setStatusBarX are deprecated as of iOS9
- It's deprecated to have UIViewControllerBasedStatusBarAppearance=NO in your info.plist
- So we should be using preferredStatusBarX in all our view controllers
But it gets more interesting when there's a UINavigationController involved:
- If navigationBarHidden = true, the child UIViewController's preferredStatusBarX are called, since the child is displaying the content under the status bar.
- If navigationBarHidden = false, the UINavigationController's preferredStatusBarX are called, after all it is displaying the content under the status bar.
- The UINavigationController's default preferredStatusBarStyle uses the value from UINav.navigationBar.barStyle. .Default = black status bar content, .Black = white status bar content.
- So if you're setting barTintColor to some custom colour (which you likely are), you also need to set barStyle to .Black to get white status bar content. I'd set barStyle to black before setting barTintColor, in case barStyle overrides the barTintColor.
- An alternative is that you can subclass UINavigationController rather than mucking around with bar style.
- HOWEVER, if you subclass UINavigationController, you get no control over the status bar if navigationBarHidden = true. Somehow UIKit goes direct to the child UIViewController without asking the UINavigationController in this situation. I would have thought it should be the UINavigationController's responsibility to ask the child >shrugs<.
- And modally displayed UIViewController's only get a say in the status bar if modalPresentationStyle = .FullScreen.
- If you've got a custom presentation style modal view controller and you really want it to control the status bar, you can set modalPresentationCapturesStatusBarAppearance = true.
回答8:
To hide status bar in iOS7 you need 2 lines of code
in application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions write
[[UIApplication sharedApplication] setStatusBarHidden:YES];
in info.plist add this
View-Controller Based Status Bar Appearance = NO
回答9:
For better understanding add some photos with comments:
App before any changes
Found in your Project Navigator
folder named Supporting Files
and click on *.plist file
After you will get different setting of your app showed. You need to add 2 keys UIStatusBarHidden
and UIViewControllerBasedStatusBarAppearance
. You can do this simply clicking on + button
After pressing + you can choose one of the key - just start to type.
Correct version:
And finally application after applying this changes:
Also, you can find alternative solution here
回答10:
Try that;
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
回答11:
In iOS10 all I needed to do is override the prefersStatusBarHidden
var in my RootViewController
(Swift):
override var prefersStatusBarHidden: Bool {
return true
}
回答12:
To hide your status bar in iOS7:
Open Your plist-file, then add a add a row called "View controller-based status bar appearance" and set its value to NO
.
回答13:
Here is the Swift version (pre iOS9):
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: UIStatusBarAnimation.None)
}
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.None)
}
This also works (iOS7+):
override func prefersStatusBarHidden() -> Bool {
return true
}
You also need to call:
setNeedsStatusBarAppearanceUpdate()
in say viewDidLoad()
.
Note that if you use a SplitView controller, or some other container
view controller, you also need to have it return your class when its sent childViewControllerForStatusBarHidden
. One way to do this is have a public weak var for say statusController
, and return it in this overridden method.
回答14:
You should add this value to plist: "View controller-based status bar appearance" and set it to "NO".
回答15:
Steps for hide status bar in iOS
1. open AppDelegate.m file, add application.statusBarHidden in didFinishLaunchingWithOptions method
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
application.statusBarHidden = YES;
return YES;
}
- open info.plist and set
View controller-based status bar appearance
set NO
回答16:
iOS 9 onwards :
As statusBarHidden
method was Deprecated from iOS9 you need to add two values in plist as below :
<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
or by User Interface Please refre below image :
As statusBarHidden
is Deprecated from iOS9 :
@property(readwrite, nonatomic,getter=isStatusBarHidden) BOOL
statusBarHidden NS_DEPRECATED_IOS(2_0, 9_0, "Use -[UIViewController
prefersStatusBarHidden]") __TVOS_PROHIBITED;
回答17:
FIXED SOLUTION FOR SWIFT 3+ (iOS 9, 10)
1- In info.plist set below property
2- Paste below code to Root controller , To
private var isStatusBarHidden = true {
didSet {
setNeedsStatusBarAppearanceUpdate()
}
}
override var prefersStatusBarHidden: Bool {
return isStatusBarHidden
}
You can call isStatusBarHidden = true
and isStatusBarHidden = false
where you want to hide/show
status bar
回答18:
From UIKit
>UIApplication.h
:
// Setting statusBarHidden does nothing if your application is using the default UIViewController-based status bar system.
@property(nonatomic,getter=isStatusBarHidden) BOOL statusBarHidden;
- (void)setStatusBarHidden:(BOOL)hidden withAnimation:(UIStatusBarAnimation)animation NS_AVAILABLE_IOS(3_2);
So should set View controller-based status bar appearance
to NO
回答19:
To answer the Susitha's question: use setNeedsStatusBarAppearanceUpdate. This will make a call to prefersStatusBarHidden to refresh with your desired status bar state. Try this:
@property (nonatomic, getter=isHideStatusBar) BOOL hideStatusBar; // Give this a default value early
- (BOOL)prefersStatusBarHidden {
return self.isHideStatusBar;
}
- (void)someMethod {
// triggered by an event or user action
[self setHideStatusBar:YES];
[self setNeedsStatusBarAppearanceUpdate];
}
If you want to see the status bar again, set your property hideStatusBar (or whatever you call it) to NO. Call preferStatusBarHidden indirectly by making another call to
[self setNeedsStatusBarAppearanceUpdate]
回答20:
Update for Swift 3:
Update Info.plist with the following info:
View controller-based status bar appearance: NO
Then, in a ViewController or elsewhere:
UIApplication.shared.isStatusBarHidden = true