UINavigationController 作为 UITabBarController 的 child 留下了一个缺口

UINavigationController as a child of UITabBarController leaves a gap

在我的应用程序中,我有一个 UITabBarController 作为根视图。我有两步模式视图,将通过使用导航控制器进行导航。我 运行 遇到一个问题,当我将 UINavigationController 添加为 UITabBarController 的 child 时,导航控制器底部留下了标签栏大小的间隙。请参阅所附图片(为丑陋道歉,它仅用于演示目的)。

图中,底部的白色条是标签栏,蓝色背景是当前选中标签的视图控制器。黄色是导航控制器中包含的视图控制器。红色是将导航控制器作为 child 添加到选项卡栏控制器时创建的间隙。

只有当标签栏设置为不透明时才会出现这种情况。导航控制器上扩展布局的边缘没有区别。似乎无论做什么,我都无法做任何事情。

我正在以一种非常简单的方式添加导航控制器:

    addChildViewController(navigationController)
    view.addSubview(navigationController.view)
    navigationController.view.setTranslatesAutoresizingMaskIntoConstraints(false)

    view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-20-[view]-20-|", options: nil, metrics: nil, views: ["view" : navigationController.view]))
    view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-100-[view]-100-|", options: nil, metrics: nil, views: ["view" : navigationController.view]))

如果我在应用程序委托中将导航控制器设置为根视图控制器,它会正确显示,底部没有间隙。

这是标签栏和导航控制器之间交互的错误,还是我可以做些什么来防止这种情况?

导航中包含的视图控制器需要扩展边缘集。此外,必须在包含的视图控制器上将 extendedLayoutIncludesOpaqueBars 设置为 true。我将以下内容添加到将包含在导航控制器中的视图控制器中:

edgesForExtendedLayout = UIRectEdge.Bottom
extendedLayoutIncludesOpaqueBars = true