视图加载后隐藏状态栏留下黑条

时间:2012-10-16 23:52:27

标签: iphone objective-c ios

在视图加载后隐藏状态栏时,我遇到了一个奇怪的问题。如果我在ViewDidLoad方法中添加以下方法,则状态栏将从视图中完全删除:

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

但是,如果我在IBAction或其他方法中调用此方法,状态栏仍然会滑落,但会留下与其背后相同高度的黑条。

我已经考虑过将整个视图向上移动20px,但这真的是一个解决方案吗?我不想只是重叠一个黑条,因为未来的操作系统升级状态栏高度会发生变化。

Status bar leaving black bar

5 个答案:

答案 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];
}