iOS - 推送另一个 View Controller 然后返回后更新自动布局约束常量停止工作

标签 ios objective-c uiviewcontroller autolayout

我有一个用IB( Storyboard)设计的UIViewController,它有一个包含一些控件的UIView。 UIView 有一个自动布局约束来固定其高度。在我的 UIViewController 子类中,我有一个连接到高度约束的 IBOutlet NSLayoutConstraint (ivar),以便我可以在代码中调整它。根据用户事件,我通过将约束的 constant 属性修改为 80 到 44 之间来扩展/缩小 UIView 的高度,这也会向上/向下滑动 UITableView(限制在 UIView 的底部)。我以前使用过这种技术,效果很好。

我现在在带有 UITabBar 的父容器 UIViewController 中使用此 UIViewController 的 4 个实例。当 UITabBar 选项卡选择更改时,我使用 insertSubView 交换适当的实例。问题是 UIView 无法在第一个 subview Controller 选项卡页中展开/收缩。在其他 3 个选项卡页实例中,它工作正常。同样在它工作的 3 个选项卡页中,如果我将另一个 View Controller 插入堆栈然后返回,则 UIView 的大小调整将不再起作用。

在扩展/收缩失败的情况下,我使用 NSLog 来监视约束的 constant 属性的值,并且它在每个实例中都会发生更改,但是UIView 的高度不受影响。好像约束不再设置为在 UIView 上起作用??

我使用的是 Xcode 5.1,我的应用程序面向 iOS7。

最佳答案

最终通过更改 animateWithDuration block 中的代码解决了这个问题,该代码在容器控件上调用 layoutIfNeeded 来刷新控件的位置。基本上,我不再只是在父容器控件上调用 layoutIfNeeded,而是在每个子控件上调用 layoutIfNeeded,这些子控件的位置会因约束常量的修改而发生变化。现在,所有控件在所有 4 个选项卡页上都可以正确重新定位,甚至在从另一个 View Controller 返回后也是如此。

关于iOS - 推送另一个 View Controller 然后返回后更新自动布局约束常量停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25033653/

相关文章:

ios - 如何创建混合开发 Pod

iphone - 如何使用注释降低 MKMapview 的缩放级别?

iphone - NIPhotoAlbumScrollView : unable to adjust image after device rotation

iphone - 在 ViewController 类之外添加 UIView 类以显示 subview

ios - 如何检查当前的 ViewController 是否是我要推送的那个?

ios - UITextView 未检测到链接

iOS - 检索和保存游戏分数

ios - Swift:在 ContainerView 中从 ViewController 单击到 ViewController 的 Storyboard解决方案

ios - 遍历 NSMutableArray 以在数组中添加对象

ios - 用于自定义 UIView 的 IBOutlets