iOS – 更新自动布局约束常量在推送另一个视图控制器然后返回后停止工作

我有一个UIViewControllerdevise在IB(Storyboard)有一个UIView包含几个控件。 UIView有一个自动布局约束来修复它的高度。 在我的UIViewController子类中,我有一个IBOutlet NSLayoutConstraint (ivar)连接到高度约束,以便我可以在代码中进行调整。 根据用户事件,我通过修改约束的80和44之间的constant属性来展开/缩小UIView的高度,这也是向上/向下滑动UITableView,它被限制在UIView的底部。 我以前使用过这种技术,一切正常。

我现在在UITabBar的父容器UIViewController中使用UIViewController的4个实例。 当UITabBar选项卡select更改时,我使用insertSubView在适当的实例中insertSubView 。 问题是UIView无法展开/收缩在第一个子视图控制器选项卡页。 在其他3个标签页实例中,它工作正常。 同样在3个标签页中它的工作原理,如果我推入另一个视图控制器到堆栈,然后返回,调整UIView不再工作。

在展开/缩小失败的情况下,我已经使用NSLog来监视约束的constant属性的值,并且在每个实例中都被改变,但UIView的高度不受影响。 就好像约束不再设置为在UIView上工作?

我使用的Xcode 5.1和我的应用程序是iOS7的目标。

最后,通过更改调用容器控件上的layoutIfNeededanimateWithDuration块内的代码来刷新控件的位置来解决此问题。 基本上,而不是只调用父容器控件上的layoutIfNeeded ,我现在调用layoutIfNeeded ,因为约束常量被修改,每个子控件的位置将会改变。 现在,所有控件在所有4个标签页上正确地重新定位,甚至在从另一个视图控制器返回之后。