在iPhone 7和8等一些设备中,导航栏在导航后与状态栏重叠,父视图控制器隐藏了状态栏,但我分别在viewWillAppear和viewWillDisappear中显示和隐藏它。我在iOS 12中进行了测试,它很有效。
我正在使用prefersStatusBarHidden来隐藏状态栏。
图片在这里导航栏重叠状态栏
更新:这里是一个示例项目:https://github.com/FranklinSamboni/NavBarTestSwfit.它在iOS 12中运行良好,但在iOS 13中,导航栏与iPhone 7,8 中的状态栏重叠
iPhone 8的图像(模拟器(家第二种观点第二视图
好吧,我要给出一个模棱两可的答案。
-
一方面,您肯定在iOS13中发现了一种新行为。隐藏状态栏时,导航栏会收缩。你可以称之为iOS 13中的一个错误…
-
另一方面,也可以说你所做的是错误的。如果你有一个导航栏,你已经无法在没有边框的设备(iPhone X等(上隐藏状态栏了,现在苹果似乎认为如果你有导航栏,就根本不会隐藏状态栏。这是一个合理的假设,因为当有导航栏时,以纵向方式隐藏状态栏是没有意义的,尤其是在导航控制器的一些子级中,而不是在其他子级中。
所以你可以就此提交一份错误报告,但我认为你不会从中得到任何乐趣。苹果可能会回答说,这是有意的,或者至少是他们做了一些不想支持的事情的结果。你有一个导航栏;允许显示状态栏。
我也遇到了同样的问题,经过几个小时的研究,我找到了一个不完美但有效的解决方案。希望对你有用。代码是用Objective-C编写的。
在第二个ViewController的viewDidPear方法中,先隐藏statusBar,然后立即显示它。
- 在secondViewController中声明成员变量
BOOL statusBarHidden
- 从UIViewController实现prefersStatusBarHidden方法
- (BOOL)prefersStatusBarHidden { return statusBarHidden; }
- 创建一个新方法setStatusBarHidden
- (void)setStatusBarHidden:(BOOL)hidden { if (statusBarHidden != hidden) { statusBarHidden = hidden; [self setNeedsStatusBarAppearanceUpdate]; } }
- 调用setStatusBarHidden in viewDidPear
- (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; [self setStatusBarHidden:YES]; [self setStatusBarHidden:NO]; }