如何隐藏iOS状态栏

Sus*_*tha 217 statusbar show-hide ios7

在我的iOS视频应用中,状态栏隐藏在某些视图控制器中.我使用以下代码完成了此操作.

[[UIApplication sharedApplication] setStatusBarHidden:YES];
Run Code Online (Sandbox Code Playgroud)
  • 它适用于iOS 5和iOS 6,但不适用于iOS 7.

  • 我在特定的视图控制器中试过这个,

例如:

-(BOOL)prefersStatusBarHidden { return YES; }
Run Code Online (Sandbox Code Playgroud)

它运行良好,但我不能再在父视图控制器中显示状态栏.

Raj*_*071 276

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

在此输入图像描述

  • 作为参考,原始键是`UIViewControllerBasedStatusBarAppearance` (39认同)

She*_*pta 189

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

<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
Run Code Online (Sandbox Code Playgroud)

图片


小智 112

在viewdidload中添加以下行

  [[UIApplication sharedApplication] setStatusBarHidden:YES
                                        withAnimation:UIStatusBarAnimationFade];
Run Code Online (Sandbox Code Playgroud)

并添加新方法

  - (BOOL)prefersStatusBarHidden {
          return YES;
  }
Run Code Online (Sandbox Code Playgroud)

还要更改info.plist文件查看基于控制器的状态栏外观"=否

它适合我


Gur*_*gam 33

在Plist中添加以下属性.

Status bar is initially hidden = YES

View controller-based status bar appearance = NO
Run Code Online (Sandbox Code Playgroud)

现在状态栏将隐藏.

  • 原始密钥是UIStatusBarHidden和UIViewControllerBasedStatusBarAppearance (7认同)

Raj*_*han 27

试试这个简单的方法:


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];
}
Run Code Online (Sandbox Code Playgroud)

迅速:

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)
}
Run Code Online (Sandbox Code Playgroud)

  • 这显然不适合我 (3认同)

小智 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;
}
Run Code Online (Sandbox Code Playgroud)


Chr*_*ris 12

  • 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.
  • 另一种方法是你可以继承UINavigationController,而不是使用bar风格.
  • 但是,如果您继承UINavigationController,则如果navigationBarHidden = true,则无法控制状态栏.不知怎的,UIKit直接转到子UIViewController而没有在这种情况下询问UINavigationController.我本以为应该是UINavigationController要求孩子> shrugs <.
  • 如果modalPresentationStyle = .FullScreen,模态显示的UIViewController只会在状态栏中显示.
  • 如果您有一个自定义演示样式模式视图控制器,并且您真的希望它控制状态栏,则可以设置modalPresentationCapturesStatusBarAppearance = true.


Sha*_*yaz 9

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

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

     [[UIApplication sharedApplication] setStatusBarHidden:YES];
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在info.plist中添加这个

     View-Controller Based Status Bar Appearance = NO
    
    Run Code Online (Sandbox Code Playgroud)


gbk*_*gbk 8

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

应用之前的任何变化

在此输入图像描述

找到您Project Navigator命名的文件夹Supporting Files,然后单击*.plist文件

在此输入图像描述

在您获得应用程序的不同设置后显示.你需要添加2个键UIStatusBarHiddenUIViewControllerBasedStatusBarAppearance.您只需单击+按钮即可完成此操作

在此输入图像描述

按+后,您可以选择其中一个键 - 只需开始键入.

正确版本:

在此输入图像描述

最后应用此更改后的应用程序:

在此输入图像描述

此外,您可以在此处找到替代解决方案


and*_*ewz 8

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

override var prefersStatusBarHidden: Bool {
    return true
}
Run Code Online (Sandbox Code Playgroud)


Jer*_*ong 8

斯威夫特 5

使用以下步骤隐藏 iOS 状态栏:

  1. 在 Info.plist 上打开。
  2. 添加新的关键视图控制器基于状态栏的外观和值设置为NO
  3. 添加新键状态栏最初是隐藏的,值设置为YES
  4. 重新编译项目。
  5. 状态栏现在应该隐藏在 iOS 手机上。

最终设置截图:

最终设置

这适用于Xcode 10.2


Kem*_*nak 7

试试吧;

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
Run Code Online (Sandbox Code Playgroud)


小智 5

要在iOS7中隐藏状态栏:

打开plist文件,然后添加一行名为"View controller-based status bar appearance"并将其值设置为NO.


Esq*_*uth 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)
}
Run Code Online (Sandbox Code Playgroud)

这也有效(iOS7 +):

override func prefersStatusBarHidden() -> Bool {
    return true
}
Run Code Online (Sandbox Code Playgroud)

你还需要打电话:

setNeedsStatusBarAppearanceUpdate()
Run Code Online (Sandbox Code Playgroud)

在说viewDidLoad().

请注意,如果您使用SplitView控制器或其他container视图控制器,则还需要在发送时返回您的类childViewControllerForStatusBarHidden.执行此操作的一种方法是使用公共弱变量statusController,并在此重写方法中返回它.


Ket*_*n P 5

iOS 9 以后:

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

<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
Run Code Online (Sandbox Code Playgroud)

或通过用户界面请参考下图:

在此处输入图片说明

由于statusBarHidden弃用iOS9

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


MAN*_*HAK 5

Swift 3+ (iOS 9, 10) 的固定解决方案

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

在此处输入图片说明

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

 private var isStatusBarHidden = true {
        didSet {
            setNeedsStatusBarAppearanceUpdate()
        }
    }

    override var prefersStatusBarHidden: Bool {
        return isStatusBarHidden
    }
Run Code Online (Sandbox Code Playgroud)

你可以打电话isStatusBarHidden = trueisStatusBarHidden = false你想要的hide/show状态栏