如何隐藏iOS状态栏

在我的iOSvideo应用程序状态栏隐藏在一些视图控制器。 我用下面的代码做了这个。

[[UIApplication sharedApplication] setStatusBarHidden:YES]; 
  • 它适用于iOS 5和iOS 6,但不适用于iOS 7。

  • 我试着用这个特别的视图控制器,

例如:

 -(BOOL)prefersStatusBarHidden { return YES; } 

它工作正常,但我不能在父视图控制器中再次显示状态栏。

您应该将此值添加到plist:“ 查看基于控制器的状态栏外观 ”并将其设置为“ NO ”。

在这里输入图像说明

将以下内容添加到Info.plist中:

 <key>UIStatusBarHidden</key> <true/> <key>UIViewControllerBasedStatusBarAppearance</key> <false/> 

图片

在viewdidload中添加以下行

  [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade]; 

并添加新的方法

  - (BOOL)prefersStatusBarHidden { return YES; } 

也改变info.plist文件查看基于控制器的状态栏外观“=否

它的作品对我来说

在Plist中添加以下属性。

 Status bar is initially hidden = YES View controller-based status bar appearance = NO 

现在状态栏会隐藏起来。

试试这个简单的方法:


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]; } 

迅速:

 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) } 

我做了以下,似乎工作(即使在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; } 

要在iOS7中隐藏状态栏,您需要2行代码

  1. 在应用程序中:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions write

      [[UIApplication sharedApplication] setStatusBarHidden:YES]; 
  2. 在info.plist中添加这个

      View-Controller Based Status Bar Appearance = NO 

为了更好的理解,添加一些照片与评论:

在任何更改之前的应用

在这里输入图像说明

在名为Supporting Files Project Navigator文件夹中find,然后单击* .plist文件

在这里输入图像说明

之后你会得到不同的应用程序显示设置。 你需要添加2个键UIStatusBarHiddenUIViewControllerBasedStatusBarAppearance 。 您只需点击+button就可以做到这一点

在这里输入图像说明

按下+之后,您可以select其中一个键 – 只需开始键入即可。

正确的版本:

在这里输入图像说明

最后应用这个改变后的应用程序:

在这里输入图像说明

另外,你可以在这里find替代解决scheme

尝试一下;

 [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone]; 
  • UIApplication.setStatusBarX从iOS9开始已弃用
  • 在你的info.plist中有UIViewControllerBasedStatusBarAppearance = NO
  • 所以我们应该在我们所有的视图控制器中使用preferredStatusBarX

但是当涉及到一个UINavigationController的时候它变得更有趣了:

  • 如果navigationBarHidden = true,则调用子UIViewController的preferredStatusBarX,因为子级正在状态栏下显示内容。
  • 如果navigationBarHidden = false,则会调用UINavigationController的preferredStatusBarX,毕竟它正在状态栏下显示内容。
  • UINavigationController的默认preferredStatusBarStyle使用UINav.navigationBar.barStyle中的值。 .Default =黑色状态栏内容,.Black =白色状态栏内容。
  • 所以,如果你将barTintColor设置为一些自定义颜色(你可能是),你还需要设置barStyle为.Black来获得白色的状态栏内容。 在设置barTintColor之前,我将barStyle设置为黑色,以防barStyle覆盖barTintColor。
  • 另一种方法是你可以inheritanceUINavigationController而不是用bar风格。
  • 然而,如果你inheritance了UINavigationController,你不能控制状态栏,如果navigationBarHidden = true。 不知何故,在这种情况下,UIKit不需要询问UINavigationController就可以直接进入子UIViewController。 我会认为这应该是UINavigationController的责任,要求孩子>耸肩<。
  • 和模态显示的UIViewController的只有在状态栏中发言,如果modalPresentationStyle = .FullScreen。
  • 如果你有一个自定义的演示风格的模式视图控制器,你真的想要它来控制状态栏,你可以设置modalPresentationCapturesStatusBarAppearance = true。

这里是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 ,然后在这个覆盖的方法中返回。

在iOS7中隐藏状态栏:

打开您的plist文件,然后添加一个名为“基于视图控制器的状态栏外观”的添加行并将其值设置为NO

您应该将此值添加到plist:“查看基于控制器的状态栏外观”并将其设置为“NO”。

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; } 
  1. 打开info.plist并设置

View controller-based status bar appearance设置NO

iOS 9以上:

由于statusBarHidden方法从iOS9弃用 ,你需要在plist中添加两个值,如下所示:

 <key>UIStatusBarHidden</key> <true/> <key>UIViewControllerBasedStatusBarAppearance</key> <false/> 

或通过用户界面请refre下面的图像:

在这里输入图像说明

由于statusBarHidden已从iOS9中 弃用

@property(readwrite,nonatomic,getter = isStatusBarHidden)BOOL statusBarHidden NS_ DEPRECATED _IOS( 2_0,9_0 ,“Use – [UIViewController prefersStatusBarHidden]”)__TVOS_PROHIBITED;

在iOS10中,我需要做的是覆盖我的RootViewController (Swift)中的prefersStatusBarHidden var:

 override var prefersStatusBarHidden: Bool { return true } 

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); 

所以应该将View controller-based status bar appearance为NO

回答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] 

Swift 3的更新:

使用以下信息更新Info.plist:

View controller-based status bar appearance: NO

然后,在ViewController或其他地方:

UIApplication.shared.isStatusBarHidden = true

SWIFT 3+(iOS 9,10)的固定解决scheme

1-在info.plist下面设置属性

在这里输入图像说明

2-将以下代码粘贴到根控制器,到

  private var isStatusBarHidden = true { didSet { setNeedsStatusBarAppearanceUpdate() } } override var prefersStatusBarHidden: Bool { return isStatusBarHidden } 

你可以调用isStatusBarHidden = trueisStatusBarHidden = false你想hide/show状态栏