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 不起作用的主要内容,如果未能解决你的问题,请参考以下文章