setStatusBarHidden不起作用

Ros*_*one 23 ios

在我UIViewController,我有:

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
    [self.view sizeToFit];
}
Run Code Online (Sandbox Code Playgroud)

然而,观点看起来像这样:

在此输入图像描述

我确定这段代码会运行.我从一个加载视图xib.我没有对状态栏做任何其他事情,比如改变它的风格.可能有什么不对?

即使我在我的app委托中设置`application.statusBarHidden = YES',我也看到:

在此输入图像描述

Ros*_*one 62

在应用程序的plist中,如果将"View controller-based status bar appearance"设置为YES,请将此代码放在视图控制器中,在该视图控制器中隐藏状态栏:

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

否则,如果"查看基于控制器的状态栏外观"设置为"否",则只要您想隐藏状态栏,请调用以下内容.

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

  • `[[UIApplication的sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];`可以提供你的答案被弃用ios9 @quarac @Rose (2认同)

Erh*_*rci 45

如果要在应用中隐藏状态栏,请按照以下步骤操作:

步骤1 :

在此输入图像描述

第2步:

在此输入图像描述

第3步:

添加到您的appDelegate didFinishLaunchingWithOptions函数

application.statusBarHidden = YES;
Run Code Online (Sandbox Code Playgroud)

所以:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
      application.statusBarHidden = YES;
}
Run Code Online (Sandbox Code Playgroud)

  • 这会强制您的应用程序进入兼容模式,该模式专门用于在开发人员没有时间修复应用程序以执行新方法时,使旧应用程序按预期在iOS 7上运行.相反,您需要在视图控制器中实现prefer*方法. (5认同)
  • @ Erhan Demirci你只是在@Rose Perrone建议的活动视图控制器上实现`-preferStatusBarHidden`. (3认同)

Mar*_*bri 12

那是因为iOS 7改变了它处理状态栏的方式.

设置UIViewControllerBasedStatusBarAppearanceNO您的应用程序Info.plist应该工作.

  • 不要忘记指出这有效地禁用了新方法并恢复到兼容模式. (3认同)

Jou*_*har 11

您可以使用以下代码显示/隐藏您的应用程序状态栏(适用于IOS 7 - IOS 8和IOS 9):

在你的项目.h文件中添加这个布尔值:

BOOL isShowStatus;
Run Code Online (Sandbox Code Playgroud)

在.m文件中添加:

//To show the status bar:
-(void)showTheStatusBar
{
    isShowStatus = YES;
    [self setNeedsStatusBarAppearanceUpdate];
}

//And to hide the status bar:
-(void)hideTheStatusBar
{
    isShowStatus = NO;
    [self setNeedsStatusBarAppearanceUpdate];
}

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

只需从任何地方调用它,例如:

- (void)viewDidLoad
{
    [super viewDidLoad];

    //To show the status bar:

    [self showTheStatusBar];

    //Or to hide it:

    [self hideTheStatusBar];
}
Run Code Online (Sandbox Code Playgroud)


Jav*_*ría 5

对我来说它工作正常:

- (BOOL)prefersStatusBarHidden {
    return YES;
}

总是在根视图中.如果您在子视图中这样做将无法工作,因为状态栏可见性将从父视图中获取.