当父容器视图约束以编程方式更改时,UINavigationController子视图不调整大小

时间:2014-06-03 00:24:43

标签: ios objective-c cocoa-touch autolayout

我遇到了一个非常令人沮丧的问题,我通过自动布局约束以编程方式调整根视图控制器中容器视图的高度,但其层次结构中的一个视图未正确更新其大小,我可以'弄清楚什么是破碎的。当我旋转设备或执行导航时,所有内容都会再次正常放置,因此看起来自动布局代码中可能存在错误。

层次结构有点复杂,但这是它的工作原理:

Root View Controller - >容器视图 - >导航控制器 - >菜单视图控制器

MenuViewController没有正确更新其大小。调整约束后,容器视图和导航控制器都具有正确的高度。我无法弄清楚为什么导航控制器没有将布局更改传递给它的子项,直到发生一些迫使它重新计算其布局的其他事件(旋转/导航)。

我已经尝试了一切我能想到的强迫视图更新其布局(包括setNeedsUpdateConstraintssetNeedsLayoutlayoutIfNeeded)但我尝试的任何东西似乎都没有任何影响!

1 个答案:

答案 0 :(得分:1)

终于通过在viewDidAppear中手动调整菜单视图控制器的高度来设法让它工作。然而,这显然是丑陋的,所以如果有人能弄明白如何让autolayout完成它的工作请发帖,我会奖励答案。

更新:我通过将委托附加到UINavigationController并监控其navigationController:didShowViewController:animated:方法并简单地执行此操作来改进我的实施:

viewController.view.height = navigationController.view.height;

这解决了所有屏幕的问题,而不仅仅是我的菜单控制器。很奇怪,这不仅仅是正常的行为,但我想它事先计算了高度(在我的约束被应用之前),所以它可以动画到位。