在iOS7中无法隐藏状态栏

我刚刚把我的iPhone 5 iOS 7升级到四个测试版。现在,当我从Xcode 5在iPhone上运行我的应用程序时,状态栏没有隐藏,尽管它应该隐藏。

不工作:

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

不工作:

[UIApplication sharedApplication].statusBarHidden = YES;

无法登录苹果开发者论坛

148233 次浏览

我不知道为什么你“不能登录苹果开发者论坛”,但(在不违反NDA的情况下)你也可以通过Xcode隐藏你的状态栏。这是应用程序目标的一般设置。enter image description here

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

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

起初,这对我来说并不管用,然后在这个方法的文档中说: //如果你的应用程序使用默认的基于uiviewcontroller的状态栏系统,设置statusBarHidden没有任何作用 这必须在plist文件上完成,将key View controller-based status bar appearance set添加到NO

在你的app plist文件中添加一行“View controller based status bar appearance”,并将其设置为NO

注意,如果你在应用中使用UIImagePickerController,这是行不通的。

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

一个在Xcode中添加View Base Controller到你的信息设置的例子

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

- (BOOL)prefersStatusBarHidden {
return YES;
}

为了使用遗留的UIApplication方法来隐藏/显示状态栏,你的应用程序必须为iOS 7设置一个plist值:

View-Controller Based Status Bar Appearance = NO

默认设置为YES。如果将其更改为NO,则可以使用遗留方法。如果你让它设置为YES,你仍然可以隐藏状态栏,但这取决于应用程序中的每个视图控制器子类重写:prefersStatusBarHidden以返回YES。

任何时候你的应用程序需要状态栏外观或可见性的改变,并且基于视图控制器的状态栏外观被设置为YES,你最外层的视图控制器需要调用:

setNeedsStatusBarAppearanceUpdateAnimation

在Plist中添加以下属性。

-> __abc0 = yes

-> __abc0 = no

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

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

- (BOOL)prefersStatusBarHidden
{
return YES;
}
  1. 在plist中添加----

    基于视图控制器的状态栏外观——NO

  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
    }
    

For status bar issue in iOS 7 but target should be 5.1 and above for the app

-(BOOL)prefersStatusBarHidden
{
return YES;
}

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

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

取值范围:NO

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

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

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

  1. < p >疏忽:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

    [application setStatusBarHidden:YES];
    
  2. in info.plist add this

    View-Controller Based Status Bar Appearance = NO
    

这个线程上的许多答案都是有效的,但我的理解是,如果你试图做任何动态的事情,你最终需要调用:

[self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
application.statusBarHidden = YES;
return YES;
}

为了隐藏状态栏,我必须做以下两项更改:

添加以下代码到视图控制器,你想隐藏状态栏:

- (BOOL)prefersStatusBarHidden
{
return YES;
}

将此添加到您的。plist文件(在应用程序设置中转到'info')

View controller-based status bar appearance --- NO

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

[[UIApplication sharedApplication] setStatusBarHidden:YES];

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

ui + HideStatusBar.h

#import <UIKit/UIKit.h>


@interface UIViewController (HideStatusBar)


@end

ui + 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

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

  • 状态栏初始隐藏= YES
  • 基于控制器的视图状态栏外观= NO

导航到项目并选择目标->通用,并看到“状态栏样式…“在应用程序启动时隐藏”复选框将被选中。这是可行的。

试试这个简单的方法:

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


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

隐藏状态栏的步骤:

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

2.和设置,查看基于控制器的状态栏外观:布尔NO

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

对于这个问题,有很多建议的组合,但问题是iOS 6和7使用不同的方法来隐藏状态栏。我从来没有成功地在iOS 7上设置plist设置来启用ios6风格的行为,但如果你正在构建支持iOS6 +的应用程序,你需要一次使用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设置如何,这都应该有效。

我尝试了所有这些选项张贴在我的项目,他们不会工作。我认为这可能与我更新了我的Xcode,然后应用程序到iOS 7和一些设置在某个地方搞砸了有关。我决定为它建立一个全新的项目,在简单的设置后:“Status bar is initially hidden = YES”和“View controller-based status bar appearance = NO”,正如许多其他人所说,它工作正确(即没有状态栏)。

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

对于ios7在单个视图中使用viewWillappear方法:

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

显示状态栏使用:

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

你可以检查这个代码, pod ui + ODStatusBar

Swift 2.0+ IOS 9

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

隐藏特定viewController的状态栏

- (BOOL)prefersStatusBarHidden {
return YES;
}

设置状态栏为应用程序隐藏:

  • 在.plist中设置View controller-based status bar appearancetoNOapplication: didFinishLaunchingWithOptions: set中: [application setStatusBarHidden:YES]; < / p >

    注意:setStatusBarHidden:已弃用

    李< /引用> < / >

  • ->常规选项卡->部署信息

    .选中Hide Status bar复选框

2019年……

要制作一个没有状态栏的应用程序,

单击信息。plist,右键单击“添加行”。

添加这两个,设置如下:

enter image description here

这就是它的全部。