在 iPhone X 上,分别控制显示/隐藏导航栏和状态栏
Posted
技术标签:
【中文标题】在 iPhone X 上,分别控制显示/隐藏导航栏和状态栏【英文标题】:On iPhoneX, Control Show / Hide NavigationBar and StatusBar separately 【发布时间】:2018-06-20 19:13:56 【问题描述】:我想分别控制显示和隐藏NavigationBar
和StatusBar
或我的应用程序中的每个屏幕。
在 iPhone6、iPhone7 和 iPhone8 上,没问题。
但在 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 一样高吗?谢谢。 如果不了解您如何设置导航栏,就很难说导航栏高度问题。如果有的话,你使用了什么约束等等 我的示例项目没有特殊设置,在FirstViewController
self.navigationController.navigationBarHidden = YES;
和SecondViewController``self.navigationController.navigationBarHidden = NO;
除此之外,Hide status bar
在Deployment Info
项目的General
设置中勾选.
仔细观察您的图像,您的导航栏在 iPhone X 上似乎低于正常水平,上方有一个黑色区域。你是怎么做到的?
抱歉,我忘记提供我的示例项目没有 iPhoneX 屏幕尺寸的 LaunchImage 的信息。我想在这种情况下解决这个问题。谢谢。以上是关于在 iPhone X 上,分别控制显示/隐藏导航栏和状态栏的主要内容,如果未能解决你的问题,请参考以下文章
如何在 iOS 11 和 iPhone X 上实现隐藏 UITabBar 以显示 UIToolbar