NavBar与iOS 13 Swift中的状态栏重叠

时间:2019-10-30 21:22:30

标签: ios swift

在某些设备(如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

2 个答案:

答案 0 :(得分:1)

好吧,我要给那些想洗的东西之一。

  • 一方面,您肯定在iOS 13中发现了新行为。隐藏状态栏时,导航栏会缩小。您可以将其称为iOS 13中的错误...

  • 另一方面,可以说您在做什么是错误的。如果您有导航栏,您已经不能在没有挡板的设备(iPhone X等)上隐藏状态栏,现在Apple似乎认为如果您有导航栏,您会赢根本不会隐藏状态栏 。这是一个合理的假设,因为在存在导航栏时,尤其是在某些导航控制器的子级中,而在其他导航子级中,则没有任何意义地将状态栏隐藏在纵向状态中。

因此您可以对此提交错误报告,但我认为您不会因此而感到高兴。苹果可能会回答说这是故意的,或者至少是做他们不想支持的事情的结果。您有一个导航栏;允许状态栏显示。

答案 1 :(得分:0)

我遇到了同样的问题,经过几个小时的研究,我发现了一个不完美但可行的解决方案。希望它对您有用。代码是用Objective-C编写的。

在secondViewController的viewDidAppear方法中,先隐藏statusBar并立即显示它。

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