导航栏与iOS 13 Swift中的状态栏重叠



在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,然后立即显示它。

  1. 在secondViewController中声明成员变量BOOL statusBarHidden
  2. 从UIViewController实现prefersStatusBarHidden方法
    - (BOOL)prefersStatusBarHidden
    {
    return statusBarHidden;
    }
    
  3. 创建一个新方法setStatusBarHidden
    - (void)setStatusBarHidden:(BOOL)hidden
    {
    if (statusBarHidden != hidden)
    {
    statusBarHidden = hidden;
    [self setNeedsStatusBarAppearanceUpdate];
    }
    }
    
  4. 调用setStatusBarHidden in viewDidPear
    - (void)viewDidAppear:(BOOL)animated
    {
    [super viewDidAppear:animated];
    [self setStatusBarHidden:YES];
    [self setStatusBarHidden:NO];
    }
    

最新更新