状态栏 hide/show 影响视图大小

Status Bar hide/show affects view size

我想在用户点击按钮时 hide/show 状态栏。这是我的做法:

// Hide
[[UIApplication sharedApplication] setStatusBarHidden:YES
                                   withAnimation:UIStatusBarAnimationFade];
// Show
[[UIApplication sharedApplication] setStatusBarHidden:NO
                                   withAnimation:UIStatusBarAnimationFade];

这会破坏 UI 布局,因为视图向上移动了。我选择了所有“延伸边缘”选项,但没有帮助。

我发现布局因视图高度而改变:

- (void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];

    NSLog(@"%@", NSStringFromCGRect(self.navigationController.view.frame));
}

它记录:

{{0, 0}, {320, 568}} - 当状态栏隐藏时。

{{0, 0}, {320, 588}} - 显示时。

问题是如何在显示或隐藏状态栏时防止视图框架发生变化。

这是 iOS 8 中的一个问题。您可以通过覆盖以下内容来恢复旧行为

 -(BOOL)prefersStatusBarHidden {
   return YES;
  }

我的导航控制器嵌入到另一个视图中,该视图与顶部布局指南对齐。这就是问题所在。