在iPhoneX上,分别控制显示/隐藏NavigationBar和StatusBar

时间:2018-01-11 12:42:54

标签: ios objective-c uinavigationbar statusbar navigationbar

我想在我的应用程序中单独控制显示和隐藏NavigationBarStatusBar或每个屏幕。

iPhone6 iPhone7 iPhone8 上,没关系。

enter image description here

但在 iPhoneX 上,当显示NavigationBar时,即使StatusBar设置为YES,prefersStatusBarHidden也会一起显示。

NavigationBar的高度高于StatusBar

的高度

enter image description here

如果你能告诉我一个好的解决方案,我会很感激。

谢谢。

我的代码如下,

FirstViewController.m

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.view.backgroundColor = UIColor.yellowColor;

    self.navigationController.navigationBarHidden = YES;
}                                 }

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    self.navigationController.navigationBarHidden = YES;
}

- (void)touchUpButton:(UIButton *)button
                                  {
    SecondViewController *vc = [[SecondViewController alloc] init];
    [self.navigationController pushViewController:vc animated:YES];
}

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

SecondViewController.m

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.navigationController.navigationBarHidden = NO;
    self.navigationItem.title = @"SecondView";

    self.view.backgroundColor = UIColor.cyanColor;
}

- (void)viewWillAppear:(BOOL)animated
{
    self.navigationController.navigationBarHidden = NO;
}

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

1 个答案:

答案 0 :(得分:2)

这是iPhone X上的预期行为,您无法阻止它。在其他iPhone上显示导航栏并且导航栏没有状态栏时,导航栏会向上移动到屏幕顶部。但是在iPhone X上它无法做到这一点,因为“缺口”会切入它,你将失去部分标题。因此,在显示导航栏时,始终会显示状态栏。

这就是为什么在HIG for iPhone X中它说:

  

如果您的应用当前隐藏了状态栏,请重新考虑该决定   适用于iPhone X 。 iPhone上的显示高度提供更多垂直   内容空间比4.7“iPhone的显示和状态   栏占据屏幕的一个区域,你的应用可能不会完全   利用。状态栏还显示人们认为有用的信息。   只应隐藏它以换取附加值。

如果您在iPhone X上将显示屏的顶部和底部设为黑色(特别是隐藏它的圆角和“缺口”),那么这是一个额外的信息,那么这是让Apple拒绝您的应用的快速方法。再次在HIG for iPhone X中它说:

  

请勿掩盖或特别注意按键显示功能。请勿   试图隐藏设备的圆角,传感器外壳或   通过在黑色条上放置黑条访问主屏幕的指示器   屏幕的顶部和底部。不要使用像这样的视觉装饰   括号,边框,形状或说明特殊的说明文字   关注这些领域。

虽然大多数这些只是指导方针Apple非常热衷于此,并且几乎总是拒绝应用程序,因为它。