如何使导航栏符合安全区域?

Joh*_*oah 2 swift

我从没有导航栏的屏幕移动到有导航栏的屏幕。转到导航栏屏幕时,该栏不包含在任何安全区域约束中,并且与 iPhone X 上的状态栏重叠。我寻找了一个解决方案,但没有任何效果。如何使导航栏符合 iPhone X 上的安全区域指南,使其不会重叠?此外,它的高度似乎太短了,但我想这可以通过约束来解决。

提前致谢!

应用委托:

var window: UIWindow?
var navigationController: UINavigationController?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    window = UIWindow(frame: UIScreen.main.bounds)

    if let window = window{
        let mainVC = ViewController()
        navigationController = UINavigationController(rootViewController: mainVC)
        window.rootViewController = navigationController
        window.makeKeyAndVisible()
    }
    return true
}
Run Code Online (Sandbox Code Playgroud)

这是我用来从 ViewController 移动到 AboutViewController 的方法:

    @objc private func infoButtonTap(){
    let aboutVC = AboutViewController()
    self.navigationController?.pushViewController(aboutVC, animated: true)
}
Run Code Online (Sandbox Code Playgroud)

编辑:这是它的外观:https : //imgur.com/syuQaUn

关于VC:

这一行在 viewDidLoad 中:

        navigationController?.isNavigationBarHidden = false
Run Code Online (Sandbox Code Playgroud)

使导航栏可见。

Dev*_*don 5

如果你真的想让你的导航控制器在安全区域内。这是适合您的一种解决方案。

  1. 创建了一个 UIController 作为一切的基础控制器。让我们称之为SuperParentController

  2. 确保SuperParentController也是导航控制器的父级。

  3. 然后您可以操作您的内容和布局,SuperParentController以确保导航控制器按您的需要定位。

我们有点使用这种策略来为我们的应用程序显示一个可以随时展示的通用横幅。