繁体   English   中英

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

[英]NavBar overlaps Status Bar in iOS 13 Swift

在某些设备(如 iPhone 7 和 8)中,导航栏在导航后与状态栏重叠,父视图 controller 隐藏了状态栏,但我分别在 viewWillAppear 和 viewWillDisappear 中显示和隐藏它。 我在 iOS 12 中进行了测试,它可以工作。

我正在使用 prefersStatusBarHidden 来隐藏状态栏。

此处图像导航栏与状态栏重叠

更新:这里是一个示例项目: https://github.com/FranklinSamboni/NavBarTestSwfit 它在 iOS 12 中运行良好,但在 iOS 13 中,导航栏与 iPhone 7,8 中的状态栏重叠

使用 iPhone 8(模拟器)的图像首页第二个视图第二个视图

好的,我将给出其中一个空洞的答案。

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

  • 另一方面,可能会争辩说您所做的事情是错误的。 如果您有导航栏,您已经无法在没有边框的设备(iPhone X 等)上隐藏状态栏,现在 Apple 似乎假设如果您有导航栏,您将不会隐藏状态栏所有. 这是一个合理的假设,因为当有导航栏时,纵向隐藏状态栏是没有意义的,尤其是在导航 controller 的某些子项中,而在其他子项中则不然。

因此,您可以就此提交错误报告,但我认为您不会从中获得任何乐趣。 苹果可能会回答说这是有意的,或者至少是他们不想支持的事情的结果。 你有一个导航栏; 允许显示状态栏。

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

在 secondViewController 的 viewDidAppear 方法中,先隐藏 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. 在 viewDidAppear 中调用 setStatusBarHidden
     - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; [self setStatusBarHidden:YES]; [self setStatusBarHidden:NO]; }

你总是做错了。 使用两个视图 controller 类。 摆脱您的导航 controller 覆盖。 这就是它所需要的:

class ViewController: UIViewController {

    override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation{
        return .fade
    }

    override var prefersStatusBarHidden: Bool { return true }
}

class ViewController2: UIViewController {

    override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation{
        return .fade
    }

    override var prefersStatusBarHidden: Bool { return false }

}

或者无论你的喜好是什么。 换句话说,只要让每个视图 controller 决定自己的状态栏偏好,导航 controller 就会自动服从。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM