在视图加载后隐藏状态栏时,我遇到了一个奇怪的问题。如果我在ViewDidLoad方法中添加以下方法,则状态栏将从视图中完全删除:
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
但是,如果我在IBAction或其他方法中调用此方法,状态栏仍然会滑落,但会留下与其背后相同高度的黑条。
我已经考虑过将整个视图向上移动20px,但这真的是一个解决方案吗?我不想只是重叠一个黑条,因为未来的操作系统升级状态栏高度会发生变化。
答案 0 :(得分:3)
任何数字的硬编码总是与未来的证明相反。您的担忧是正确的。正确处理statusBar的隐藏有一点技巧。但是所有需要的信息都是可用的。
例如,UIApplication
单身人士有一个名为statusBarFrame
的属性,这正是它所听到的,是CGRect
的{{1}}帧。很酷的是,一旦你调用statusBar
该属性就会给你新的帧,甚至在动画完成之前。所以你真的只需要一些基本的数学来调整setStatusBarHidden:withAnimation:
的{{1}}。
总之,你的直觉是正确的;总是把事情计算在内。
我用这样的类别方法取得了很大的成功。 (即使在模拟器中切换通话中状态栏(Command-T)):
view
答案 1 :(得分:0)
为什么要在viewDidLoad
中调用此内容?
在loadView中试试吗?
- (void)loadView {
[super loadView];
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
}
答案 2 :(得分:0)
是的,将视图移动20像素可以解决您的问题。黑色是没有任何东西要显示,而不是真正的黑色条。
对于潜在的状态高度更改,如果发生这种情况,此修复将无效,因为视图将按新状态栏的高度移动。如果发生这种情况,您将不得不为不同的状态栏添加不同的偏移量,或者找到一个全新的解决方案。
答案 3 :(得分:0)
在viewWillAppear
:
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];
在viewDidAppear
中,您可以插入:
self.view.window.rootViewController.view.frame = [UIScreen mainScreen].applicationFrame;
在viewWillDisappear
:
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade];
答案 4 :(得分:0)
我可以通过调用:
来解决这个问题[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
正如其他人在呈现显示黑条的视图控制器之前推荐的。
例如,如果我有一个提交ViewController
的动作,我会这样称呼它:
- (IBAction)presentViewController:(id)sender {
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
ViewController *vc = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
[self presentViewController:vc animated:YES completion:nil];
}