setStatusBarHidden不起作用

在我的UIViewController ,我有:

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

但是视图看起来像这样:

在此处输入图像描述

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

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

在此处输入图像描述

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

 - (BOOL)prefersStatusBarHidden { return YES; } 

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

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

如果要在应用中隐藏状态栏,请执行以下步骤:

步骤1 :

在此处输入图像描述

第2步:

在此处输入图像描述

第3步:

添加到您的appDelegate didFinishLaunchingWithOptions函数

 application.statusBarHidden = YES; 

所以:

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

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

在应用程序Info.plist上将UIViewControllerBasedStatusBarAppearance设置为NO应该可以正常工作。

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

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

 BOOL isShowStatus; 

在.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; } 

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

 - (void)viewDidLoad { [super viewDidLoad]; //To show the status bar: [self showTheStatusBar]; //Or to hide it: [self hideTheStatusBar]; } 

对我来说它工作正常:

 - (BOOL)prefersStatusBarHidden {
    返回YES;
 }

总是在根视图中。 如果您在子视图中执行此操作将无法工作,因为状态栏可见性将从父视图中获取。

隐藏状态栏后尝试添加此项:

  [self.view setFrame:[self.view bounds]]; 

didFinishLaunchingWithOptions的appdelegate.m中:

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

当我运行你的代码时:

在此处输入图像描述