在某些设备(如iPhone 7和iPhone 8)上,导航栏在导航后与状态栏重叠,父视图控制器隐藏了状态栏,但我分别在viewWillAppear和viewWillDisappear中显示和隐藏了它。我在iOS 12上进行了测试,并且可以正常工作。
我正在使用preferredsStatusBarHidden隐藏状态栏。
此处为图片 Navbar Overlaps Status bar
更新: 这里是一个示例项目:https://github.com/FranklinSamboni/NavBarTestSwfit。 在iOS 12中可以正常工作,但在iOS 13中,导航栏与iPhone 7,8中的状态栏重叠
iPhone 8(模拟器)中的图像 Home 第二种观点 Second View
答案 0 :(得分:1)
好吧,我要给那些想洗的东西之一。
一方面,您肯定在iOS 13中发现了新行为。隐藏状态栏时,导航栏会缩小。您可以将其称为iOS 13中的错误...
另一方面,可以说您在做什么是错误的。如果您有导航栏,您已经不能在没有挡板的设备(iPhone X等)上隐藏状态栏,现在Apple似乎认为如果您有导航栏,您会赢根本不会隐藏状态栏 。这是一个合理的假设,因为在存在导航栏时,尤其是在某些导航控制器的子级中,而在其他导航子级中,则没有任何意义地将状态栏隐藏在纵向状态中。
因此您可以对此提交错误报告,但我认为您不会因此而感到高兴。苹果可能会回答说这是故意的,或者至少是做他们不想支持的事情的结果。您有一个导航栏;允许状态栏显示。
答案 1 :(得分:0)
我遇到了同样的问题,经过几个小时的研究,我发现了一个不完美但可行的解决方案。希望它对您有用。代码是用Objective-C编写的。
在secondViewController的viewDidAppear方法中,先隐藏statusBar并立即显示它。
BOOL statusBarHidden
- (BOOL)prefersStatusBarHidden
{
return statusBarHidden;
}
- (void)setStatusBarHidden:(BOOL)hidden
{
if (statusBarHidden != hidden)
{
statusBarHidden = hidden;
[self setNeedsStatusBarAppearanceUpdate];
}
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[self setStatusBarHidden:YES];
[self setStatusBarHidden:NO];
}