我有一个在 IB( Storyboard)中设计的 UIViewController,它有一个包含一些控件的 UIView。 UIView 有一个自动布局约束来固定它的高度。在我的 UIViewController 子类中,我有一个 IBOutlet NSLayoutConstraint (ivar) 连接到高度约束,以便我可以在代码中调整它。根据用户事件,我通过在 80 到 44 之间修改约束的 constant 属性来扩展/缩小 UIView 的高度,该属性还会向上/向下滑动一个被约束到 UIView 底部的 UITableView。我以前用过这种技术,一切都很好。
我现在在带有 UITabBar 的父容器 UIViewController 中使用此 UIViewController 的 4 个实例。当UITabBar 选项卡选择改变时,我使用insertSubView 换入适当的实例。问题是 UIView 在第一个 subview Controller 标签页中无法展开/收缩。在其他 3 个标签页实例中,它工作正常。同样在它工作的 3 个标签页中,如果我将另一个 View Controller 插入堆栈然后返回,则 UIView 的大小调整不再起作用。
在扩展/收缩失败的情况下,我使用 NSLog 来监视约束的 constant 属性的值,并且在每个实例中都会更改它,但是UIView 的高度不受影响。好像约束不再设置为在 UIView 上起作用??
我使用的是 Xcode 5.1,我的应用面向 iOS7。
Best Answer-推荐答案 strong>
最后通过更改 animateWithDuration block 中的代码解决了这个问题,该 block 调用容器控件上的 layoutIfNeeded 以刷新控件的位置。基本上,不只是在父容器控件上调用 layoutIfNeeded ,我现在在每个子控件上调用 layoutIfNeeded ,这些子控件的位置会因修改约束常量而发生变化。现在所有控件在所有 4 个标签页上都正确重新定位,甚至在从另一个 View Controller 返回之后也是如此。
关于iOS - 更新自动布局约束常量在推送另一个 View Controller 然后返回后停止工作,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/25033653/
|