ios - 当父容器 View 约束以编程方式更改时,UINavigationController subview 不调整大小

标签 ios objective-c cocoa-touch autolayout

我遇到了一个非常令人沮丧的问题,我通过自动布局约束以编程方式调整 Root View Controller 中容器 View 的高度,但其层次结构中的一个 View 没有正确更新其大小,我可以'不知道什么坏了。当我旋转设备或执行导航时,一切都会再次正确布局,因此自动布局代码或其他内容中可能存在错误。

层次结构有些复杂,但其工作原理如下:

Root View Controller -> 容器 View -> 导航 Controller -> 菜单 View Controller

这是 MenuViewController 没有正确更新其大小。调整约束后,容器 View 和导航 Controller 都具有正确的高度。我不明白为什么导航 Controller 不将布局更改传递给其子级,直到发生其他一些事件(旋转/导航),迫使它重新计算其布局。

我已经尝试了所有我能想到的方法来强制 View 更新其布局(包括 setNeedsUpdateConstraintssetNeedsLayoutlayoutIfNeeded)但我尝试的任何方法似乎都没有任何效果!

最佳答案

好吧,我终于通过在viewDidAppear中手动调整菜单 View Controller 的高度成功地使其工作。然而,这显然很难看,所以如果有人能弄清楚如何让自动布局完成其工作,请发帖,我将奖励答案。

更新:我通过将委托(delegate)附加到UINavigationController并监视其navigationController:didShowViewController:animated:方法并简单地执行来改进了我的实现这个:

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

这解决了所有屏幕的问题,而不仅仅是我的菜单 Controller 。非常奇怪的是,这不仅仅是正常行为,但我猜它会预先计算高度(在应用我的约束之前),以便它可以动画到位。

关于ios - 当父容器 View 约束以编程方式更改时,UINavigationController subview 不调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24005338/

相关文章:

ios - 如何为不同的 iOS 版本定义代码

ios - 将 UIButton 锚定到 UITableViewController View 的底部

ios - xcodebuild 相当于 Xcode 的 "Product > Build For > Testing"

ios - 如何以编程方式设置 WKInterfaceSlider 的最大值和最小值?

ios - 什么是 EKEntityType?

iphone - 如何在 Cocoa/Objective-C 中编写一个简单的 Ping 方法

ios - 如何将 swift Dictionary 转换为 NSDictionary

iphone - 如何仅使用 UITextField 制作 iOS 计算器

ios - 重叠透明 UIView

ios - UITextView 未在键盘中显示地球图标