无法隐藏iOS7中的状态栏

时间:2013-08-05 13:42:42

标签: objective-c statusbar ios7

我刚刚将iPhone 5 iOS 7升级到四个测试版。现在当我在这款iPhone上运行我的应用程序Xcode 5时,状态栏不会隐藏,即使它应该。

不工作:

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

不工作:

[UIApplication sharedApplication].statusBarHidden = YES;
  

无法登录Apple Developer论坛

26 个答案:

答案 0 :(得分:556)

在您的应用程序plist文件中添加一行称为“查看基于控制器的状态栏外观”并将其设置为NO

请注意,如果您在应用中使用UIImagePickerController,这根本不起作用。

来自http://www.openfl.org/developer/forums/general-discussion/iphone-5ios-7-cant-hide-status-bar/,mgiroux的解决方案

An example adding View Base Controller to your Info settings in Xcode

答案 1 :(得分:278)

在视图控制器中添加方法。

- (BOOL)prefersStatusBarHidden {
    return YES;
}

答案 2 :(得分:84)

在Plist中添加以下属性。

- > Status bar is initially hidden =是

- > View controller-based status bar appearance =否

添加两者 - 现在状态栏将消失。

答案 3 :(得分:53)

要在单个视图上隐藏状态栏,您应该使用:

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

起初,这对我不起作用,然后在这个方法的文档中看到: //如果您的应用程序使用默认的基于UIViewController的状态栏系统,则设置statusBarHidden不会执行任何操作。

这必须在plist文件上完成,将密钥View controller-based status bar appearance添加到NO。 然后它奏效了。

答案 4 :(得分:16)

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

  1. inapplication:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

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

    View-Controller Based Status Bar Appearance = NO
    

答案 5 :(得分:15)

为了使用传统的UIApplication方法隐藏/显示状态栏,您的应用必须为iOS 7设置一个plist值:

View-Controller Based Status Bar Appearance = NO

默认情况下,此值设置为YES。如果将其更改为NO,则可以使用旧方法。如果将其设置为YES,您仍然可以隐藏状态栏,但应由应用程序中的每个视图控制器子类覆盖:prefersStatusBarHidden以返回YES。

只要您的应用需要状态栏外观或可见性更改,并且基于视图控制器的状态栏外观设置为YES,您的最外层视图控制器需要调用:

setNeedsStatusBarAppearanceUpdateAnimation

答案 6 :(得分:11)

针对此问题建议的组合很多,但问题是iOS 6和7使用不同的方法来隐藏状态栏。我从未成功设置plist设置以在iOS 7上启用iOS6风格的行为,但如果您要构建应用程序以支持iOS 6+,则需要一次使用3个方法以确保特定视图控制器隐藏状态条:

// for ios 7 
- (BOOL)prefersStatusBarHidden{
    return YES;
}

// for ios 6
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [[UIApplication sharedApplication] setStatusBarHidden:YES];
}
- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    // explicitly set the bar to show or it will remain hidden for other view controllers
    [[UIApplication sharedApplication] setStatusBarHidden:NO];
}

无论您的plist设置如何,这都应该有效。

答案 7 :(得分:7)

我必须在下面进行两项更改才能隐藏状态栏:

将此代码添加到要隐藏状态栏的视图控制器中:

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

将其添加到.plist文件中(转到应用程序设置中的“信息”)

View controller-based status bar appearance --- NO

然后你可以调用这一行来隐藏状态栏:

[[UIApplication sharedApplication] setStatusBarHidden:YES];

答案 8 :(得分:6)

只需在info.plist文件中添加这两行。它将修复iOS7和旧版本。

  • 状态栏最初隐藏= YES
  • 查看基于控制器的状态栏外观=否

导航到该项目并选择目标 - >一般并看到“状态栏样式...在应用程序启动期间隐藏”复选框将被选中。这将有效。

答案 9 :(得分:6)

尝试这个简单的方法:

- (void)viewWillAppear:(BOOL)animated
{
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
}

- (void)viewWillDisappear:(BOOL)animated
{
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
}

答案 10 :(得分:4)

唯一对我有用的是在你的plist中添加以下内容

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

答案 11 :(得分:4)

我发现在整个应用中隐藏状态栏的最简单方法是在category上创建UIViewController并覆盖prefersStatusBarHidden。这样您就不必在每个视图控制器中编写此方法。

的UIViewController + HideStatusBar.h

#import <UIKit/UIKit.h>

@interface UIViewController (HideStatusBar)

@end

的UIViewController + HideStatusBar.m

#import "UIViewController+HideStatusBar.h"

@implementation UIViewController (HideStatusBar)

//Pragma Marks suppress compiler warning in LLVM. 
//Technically, you shouldn't override methods by using a category, 
//but I feel that in this case it won't hurt so long as you truly 
//want every view controller to hide the status bar. 
//Other opinions on this are definitely welcome

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation"

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

#pragma clang diagnostic pop


@end

答案 12 :(得分:3)

  1. 在plist中添加----

    查看基于控制器的状态栏外观---否

  2. 在每个viewController中写

    - (void) viewDidLayoutSubviews
    {
        CGRect viewBounds = self.view.bounds;
        CGFloat topBarOffset = 20.0;
        viewBounds.origin.y = -topBarOffset;
        self.view.bounds = viewBounds;
    
        [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];//for status bar style
    }
    
  3. 对于iOS 7中的状态栏问题,但应用程序的目标应为5.1及以上

答案 13 :(得分:3)

-(BOOL)prefersStatusBarHidden { return YES; }

答案 14 :(得分:3)

对于单视图中的iOS 7,请使用viewWillappear方法:

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

要显示状态栏,请使用:

[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:NO];

答案 15 :(得分:3)

隐藏iOS 7中状态栏的步骤:

1.转到您的应用程序info.plist文件。

2.And Set,查看基于控制器的状态栏外观:布尔值NO

希望我解决状态栏问题.....

答案 16 :(得分:2)

在Info Plist文件中为以下属性添加一行

属性名称:查看基于控制器的状态栏外观

价值:否

答案 17 :(得分:2)

这个帖子的许多答案都有效,但是如果你想要做任何动态的事情,我最终需要调用它,这是我的理解:

[self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];

答案 18 :(得分:1)

尝试将以下方法添加到应用的根视图控制器:

- (BOOL)prefersStatusBarHidden
    {
        return YES;
    }

答案 19 :(得分:1)

我尝试了在我的项目中发布的所有这些选项,但它们无法正常工作。我认为这可能与我更新我的Xcode然后将应用程序更新到iOS 7的事实有关,并且某些设置已经搞砸了。我决定为它构建一个全新的项目,经过简单的设置:“Status bar is initially hidden = YES”和“View controller-based status bar appearance = NO”正如许多其他人所说的那样它正常工作(即没有状态栏)。

所以,如果您正在开发一个已从旧版本更新到iOS 7并尝试了所有其他选项的项目,那么我的建议就是构建一个新项目。

答案 20 :(得分:0)

隐藏特定viewController的状态栏

- (BOOL)prefersStatusBarHidden {
    return YES;
}

用于设置隐藏申请的状态栏:

  • 在.plist中将View controller-based status bar appearance设置为NO 并在application: didFinishLaunchingWithOptions:集合中: [application setStatusBarHidden:YES];

      

    注意:setStatusBarHidden:不推荐使用

OR

    项目设置中的
  • - &gt;常规选项卡 - &gt;部署信息

    检查Hide Status bar框。

答案 21 :(得分:0)

对于2019年...

要制作没有状态栏的应用,

点击info.plist,右键单击“添加行”。

使用以下设置添加这两个:

enter image description here

仅此而已。

答案 22 :(得分:0)

适用于Swift 2.0+ IOS 9

override func prefersStatusBarHidden() -> Bool {
return true
}

答案 23 :(得分:0)

You can check this code, pod UIViewController+ODStatusBar

答案 24 :(得分:-1)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
application.statusBarHidden = YES;
return YES;
}

答案 25 :(得分:-7)

我不确定为什么你“无法登录Apple Developer论坛”,但是(不违反NDA)你也可以通过Xcode隐藏你的statusBar。这是您的应用程序目标的一般设置。 enter image description here