在 iPhone X 上,分别控制显示/隐藏导航栏和状态栏

Posted

技术标签:

【中文标题】在 iPhone X 上,分别控制显示/隐藏导航栏和状态栏【英文标题】:On iPhoneX, Control Show / Hide NavigationBar and StatusBar separately 【发布时间】:2018-06-20 19:13:56 【问题描述】:

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

iPhone6iPhone7iPhone8 上,没问题。

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

NavigationBar的高度比StatusBar的高

如果你能告诉我一个好的解决方案,我将不胜感激。

谢谢。

我的代码如下,

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】:

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

这就是为什么在 iPhone X 的 HIG 中这样说的原因之一:

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

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

不要掩盖或特别注意关键的显示功能。不要 试图隐藏设备的圆角、传感器外壳或 用于访问主屏幕的指示器,通过在 屏幕的顶部和底部。不要使用视觉装饰,例如 方括号、边框、形状或说明性文字以称为特殊 也请注意这些领域。

虽然其中大部分只是指南,但 Apple 对此非常热衷,并且几乎总是会因为它而拒绝应用程序。

【讨论】:

感谢您的回复。我知道 Apple 的 HIG 说 ios 应用程序应该显示状态栏,因为在 iPhoneX 上,由于“缺口区域”,状态信息不会缩小其他区域。我的应用程序的导航栏高度如何?高度比iPhone8高。有什么办法让它和 iPhone8 一样高吗?谢谢。 如果不了解您如何设置导航栏,就很难说导航栏高度问题。如果有的话,你使用了什么约束等等 我的示例项目没有特殊设置,在FirstViewControllerself.navigationController.navigationBarHidden = YES;SecondViewController``self.navigationController.navigationBarHidden = NO;除此之外,Hide status barDeployment Info项目的General设置中勾选. 仔细观察您的图像,您的导航栏在 iPhone X 上似乎低于正常水平,上方有一个黑色区域。你是怎么做到的? 抱歉,我忘记提供我的示例项目没有 iPhoneX 屏幕尺寸的 LaunchImage 的信息。我想在这种情况下解决这个问题。谢谢。

以上是关于在 iPhone X 上,分别控制显示/隐藏导航栏和状态栏的主要内容,如果未能解决你的问题,请参考以下文章

iPhone X - 隐藏状态栏向上推动导航栏

如何在 iOS 11 和 iPhone X 上实现隐藏 UITabBar 以显示 UIToolbar

在一个视图控制器上隐藏导航栏,在推送的控制器上显示它

iPhone仅在第一页隐藏导航栏

iPhone:在为导航栏显示/隐藏设置动画时无法为 contentInset 设置动画

导航栏在第二次和后续出现时隐藏在视图控制器上