将UINavigationView的大小限制为其当前显示的控制器的大小?

时间:2017-10-04 19:41:48

标签: ios swift uiviewcontroller uinavigationcontroller autolayout

我在弄清楚UINavigationController的实际结构时遇到了一些麻烦。我想约束它,使其视图与顶级控制器视图的首选大小相匹配。

类似的东西:

navController.view.heightAnchor.constraint(equalTo: navController.topViewController?.view.heightAnchor).isActive = true

给我错误:

*** Terminating app due to uncaught exception 'NSGenericException',
reason: 'Unable to activate constraint with anchors
<NSLayoutYAxisAnchor:0x600000472e00 "UILayoutContainerView:0x7f9f01d14310.top">
and <NSLayoutYAxisAnchor:0x608000270ac0 "UIView:0x7f9f01d182b0.top">
because they have no common ancestor.  Does the constraint or its anchors
reference items in different view hierarchies?  That's illegal.'

显然,顶级控制器的视图位于不同的层次结构中。怎么可能?如何实现创建非全屏UINavigationController的目标?请不要暗示让孩子控制器的下半部分空白或者其他东西。

1 个答案:

答案 0 :(得分:0)

  

如何实现创建非全屏UINavigationController的目标?

两种简单的方法:

  • 将导航控制器显示为呈现的视图控制器并自定义演示文稿。 (顺便提一下,popover就是一个例子:导航控制器 将自己的大小调整为其子级的首选大小。)

  • 制作父视图控制器,并使导航控制器成为子视图。

在这两种方法中,导航控制器的视图大小完全取决于您。