setStatusBarHidden 不起作用

Posted

技术标签:

【中文标题】setStatusBarHidden 不起作用【英文标题】:setStatusBarHidden not working 【发布时间】:2013-08-20 15:45:12 【问题描述】:

在我的UIViewController 中,我有:

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

但视图看起来像这样:

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

即使我在我的应用委托中设置了 `application.statusBarHidden = YES",我也看到了:

【问题讨论】:

【参考方案1】:

在您应用的 plist 中,如果您将“基于视图控制器的状态栏外观”设置为 YES,则将此代码放入您隐藏状态栏的视图控制器中:

- (BOOL)prefersStatusBarHidden 
    return YES;

否则,如果“查看基于控制器的状态栏外观”设置为 NO,则在您想要隐藏状态栏时调用以下命令。

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

【讨论】:

你应该先检查一下:Status bar won't disappear 这是 ios 7 之后的发展方向 [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone]; 已弃用,您能否为 ios9 @quarac @Rose 提供答案【参考方案2】:

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

第一步:

第 2 步:

第三步:

添加到你的 appDelegate didFinishLaunchingWithOptions 函数

application.statusBarHidden = YES;

所以:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

      application.statusBarHidden = YES;

【讨论】:

这会强制您的应用程序进入一种兼容模式,该模式旨在让旧应用程序在 iOS 7 上按预期运行,而开发人员没有时间修复应用程序以适应新的工作方式。相反,您需要在视图控制器中实现 prefer* 方法。 @Erhan Demirci 你只需像@Rose Perrone 建议的那样在活动视图控制器上实现-preferStatusBarHidden 您可以使用 preferStatusBarHidden 隐藏在所有项目中吗?因为我在所有视图控制器中都隐藏了状态栏。 如果您的每个 VC 都希望隐藏状态栏,他们都应该通过实施该方法明确传达该偏好(假设他们是控制状态栏的 VC)。跨度> @lhunath 使用这种“兼容模式”会导致其他问题吗?这似乎是用动画隐藏/显示状态栏的唯一好方法,因为prefersStatusBarHidden 似乎不支持这一点。【参考方案3】:

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

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

【讨论】:

别忘了指出,这实际上是在禁用新的做事方式并恢复到兼容模式。【参考方案4】:

您可以使用以下代码显示/隐藏您的应用状态栏(适用于 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;

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

- (void)viewDidLoad

    [super viewDidLoad];

    //To show the status bar:

    [self showTheStatusBar];

    //Or to hide it:

    [self hideTheStatusBar];

【讨论】:

【参考方案5】:

对我来说效果很好:

- (BOOL)prefersStatusBarHidden 返回是;

始终在根视图中。如果您在子视图中这样做将不起作用,因为状态栏的可见性将从父视图中获取。

【讨论】:

【参考方案6】:

隐藏状态栏后尝试添加:

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

在您的 appdelegate.m 中 didFinishLaunchingWithOptions:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

      application.statusBarHidden = YES;

当我运行你的代码时:

【讨论】:

@RosePerrone 你在使用导航控制器吗? 是的,我正在使用导航控制器。我只希望状态栏隐藏在一个视图中。 @RosePerrone 我正在运行您的代码,它运行良好!

以上是关于setStatusBarHidden 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在 imagePickerController IOS 7 中以编程方式删除状态栏

transpportrule不起作用

PHP.INI不起作用

C#DataGridView的行列表头背景色字体色不起作用

关于Animate css不起作用的原因

修改php.ini不起作用是为啥