在我的iOS视频应用中,状态栏隐藏在某些视图控制器中。我使用以下代码完成了这项工作。
[[UIApplication sharedApplication] setStatusBarHidden:YES];
适用于iOS 5和iOS 6,但不适用于iOS 7。
我在特定的视图控制器中尝试了这个,
例如:
-(BOOL)prefersStatusBarHidden { return YES; }
它运行良好,但我无法再在父视图控制器中显示状态栏。
答案 0 :(得分:274)
您应该将此值添加到plist:“查看基于控制器的状态栏外观”并将其设置为“否”。
答案 1 :(得分:187)
将以下内容添加到您的Info.plist中:
<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
答案 2 :(得分:111)
在viewdidload中添加以下行
[[UIApplication sharedApplication] setStatusBarHidden:YES
withAnimation:UIStatusBarAnimationFade];
并添加新方法
- (BOOL)prefersStatusBarHidden {
return YES;
}
还会更改info.plist文件 查看基于控制器的状态栏外观“=否
它的作品对我来说
答案 3 :(得分:33)
在Plist中添加以下属性。
Status bar is initially hidden = YES
View controller-based status bar appearance = NO
现在状态栏将隐藏。
答案 4 :(得分:27)
- (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];
}
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)
}
答案 5 :(得分:14)
我做了以下操作,似乎工作(即使在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;
}
答案 6 :(得分:12)
但是当涉及到UINavigationController时,它会变得更有趣:
答案 7 :(得分:9)
要在iOS7中隐藏状态栏,您需要2行代码
:( UIApplication *)应用程序didFinishLaunchingWithOptions:(NSDictionary *)launchOptions write
[[UIApplication sharedApplication] setStatusBarHidden:YES];
添加此
View-Controller Based Status Bar Appearance = NO
答案 8 :(得分:8)
为了更好地理解,请添加一些评论照片:
任何更改之前的应用程序
在名为Project Navigator
的{{1}}文件夹中找到,然后点击* .plist文件
您将获得不同的应用设置。您需要添加2个键Supporting Files
和UIStatusBarHidden
。您只需单击+按钮
按+后,您可以选择其中一个键 - 只需开始输入。
正确版本:
最后应用此更改后的应用程序:
此外,您还可以找到替代解决方案here
答案 9 :(得分:7)
试试;
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
答案 10 :(得分:7)
在iOS10中,我需要做的就是覆盖prefersStatusBarHidden
(Swift)中的RootViewController
var:
override var prefersStatusBarHidden: Bool {
return true
}
答案 11 :(得分:5)
隐藏iOS7中的状态栏:
打开您的plist文件,然后添加一行名为“查看基于控制器的状态栏外观”,并将其值设置为NO
。
答案 12 :(得分:5)
这是Swift版本(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)
}
这也适用(iOS7 +):
override func prefersStatusBarHidden() -> Bool {
return true
}
您还需要致电:
setNeedsStatusBarAppearanceUpdate()
说viewDidLoad()
。
请注意,如果您使用SplitView控制器或其他container
视图控制器,则还需要在发送childViewControllerForStatusBarHidden
时让它返回您的类。一种方法是使用公共弱变量statusController
,并在此重写方法中返回它。
答案 13 :(得分:4)
您应该将此值添加到plist:“查看基于控制器的状态栏外观”并将其设置为“NO”。
答案 14 :(得分:4)
适用于SWIFT 3+的固定解决方案(iOS 9,10)
1-在info.plist中设置属性
2-将代码粘贴到Root控制器,To
private var isStatusBarHidden = true {
didSet {
setNeedsStatusBarAppearanceUpdate()
}
}
override var prefersStatusBarHidden: Bool {
return isStatusBarHidden
}
您可以在isStatusBarHidden = true
状态栏中调用isStatusBarHidden = false
和hide/show
答案 15 :(得分:4)
iOS 9以后:
由于statusBarHidden
方法已弃用来自 iOS9 ,您需要在plist中添加两个值,如下所示:
<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
或用户界面请在图片下方重新显示:
iOS9 中的{{1>} 已弃用:
@property(readwrite,nonatomic,getter = isStatusBarHidden)BOOL statusBarHidden NS_ DEPRECATED _IOS(2_0, 9_0 ,“使用 - [UIViewController] prefersStatusBarHidden]“)__ TVOS_PROHIBITED;
答案 16 :(得分:4)
iOS中隐藏状态栏的步骤
1.打开 AppDelegate.m 文件,在didFinishLaunchingWithOptions方法中添加application.statusBarHidden
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
application.statusBarHidden = YES;
return YES;
}
View controller-based status bar appearance
设置NO
答案 17 :(得分:2)
要回答Susitha的问题:使用 setNeedsStatusBarAppearanceUpdate 。这将调用prefersStatusBarHidden来刷新所需的状态栏状态。试试这个:
@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];
}
如果要再次查看状态栏,请将属性hideStatusBar(或其他任何名称)设置为NO。通过再次调用
间接调用preferStatusBarHidden[self setNeedsStatusBarAppearanceUpdate]
答案 18 :(得分:2)
来自UIKit
&gt; 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);
所以应该将View controller-based status bar appearance
设置为NO
答案 19 :(得分:1)
Swift 3更新:
使用以下信息更新Info.plist:
View controller-based status bar appearance: NO
然后,在ViewController或其他地方:
UIApplication.shared.isStatusBarHidden = true
答案 20 :(得分:1)