如何隐藏iOS状态栏

时间:2013-09-24 11:03:22

标签: ios7 show-hide statusbar

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

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

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

例如:

-(BOOL)prefersStatusBarHidden { return YES; }

它运行良好,但我无法再在父视图控制器中显示状态栏。

21 个答案:

答案 0 :(得分:274)

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

enter image description here

答案 1 :(得分:187)

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

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

Image

答案 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)

尝试这个简单的方法:


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

答案 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)

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

答案 7 :(得分:9)

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

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

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

     View-Controller Based Status Bar Appearance = NO
    

答案 8 :(得分:8)

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

任何更改之前的应用程序

enter image description here

在名为Project Navigator的{​​{1}}文件夹中找到,然后点击* .plist文件

enter image description here

您将获得不同的应用设置。您需要添加2个键Supporting FilesUIStatusBarHidden。您只需单击+按钮

即可

enter image description here

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

正确版本:

enter image description here

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

enter image description here

此外,您还可以找到替代解决方案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中设置属性

enter image description here

2-将代码粘贴到Root控制器,To

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

    override var prefersStatusBarHidden: Bool {
        return isStatusBarHidden
    }

您可以在isStatusBarHidden = true状态栏中调用isStatusBarHidden = falsehide/show

答案 15 :(得分:4)

iOS 9以后:

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

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

或用户界面请在图片下方重新显示:

enter image description here

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

快速5

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

  1. 在Info.plist上打开。
  2. 添加新键查看基于控制器的状态栏外观,并将值设置为
  3. 添加新键状态栏最初处于隐藏状态,并且值设置为
  4. 重新编译项目。
  5. 状态栏现在应该在iOS手机上隐藏。

最终设置屏幕截图:

Final Settings

这正在使用 Xcode 10.2