2

我有一个我小时候UIViewController添加到另一个的。UIViewController当孩子被添加时,父母使用我的孩子设置框架childVC.frame = ....,但这会限制我的约束。

我可以很容易地在 IB 中复制这个问题。创建一个UIViewController,将大小更改为“自由格式”并放弃状态栏(只是让它在视觉上看起来正确)。添加一个UIButton(或任何东西)和约束,使它们的大小相同(见下图) 在此处输入图像描述

现在在视图控制器中更改顶层视图的大小并观察会发生什么。 在此处输入图像描述

它改变了我对我的约束。我希望我的按钮变得更大并且仍然保持原来的约束。如果您在屏幕中的 iPhone Retina 3.5/4.0 之间切换或从横向更改为纵向,则会自动发生某些事情。但是当我调整视图大小时为什么不呢?以自由形式布置东西并测试不同的尺寸是一件非常痛苦的事情。

更重要的是......为什么在我为我的 VC 添加子项时设置 in 代码时会发生完全相同的事情,我该frame如何防止它?

4

1 回答 1

1

基于帧的计算和自动布局不兼容。或者至少,它们的意思是暴风雨的水域。这就是你遇到问题的原因。切换到自动布局后,您必须接受不再frame直接操作的事实。

所以,你不能这样做childVC.frame = whatever

相反,您现在必须使用自动布局来更新childVC.frame. 通过在 IB 中创建一个IBOutlet作为childVC. 同样,创建另一个IBOutlet高度childVC约束。

在您的视图控制器中,更新constant值以更改大小。

myWidthConstraint.constant = 123.f;

这样做的地方是在控制器的updateViewConstraints方法中,或者在视图的情况下,updateConstraints.

也就是说,最好设置自动布局,这样您就不需要任何程序化更新。正确定义后,它将知道如何处理视图边界变化的事情。老实说,如果你想做一些更不寻常的事情,应该只需要以编程方式更新大小。

但是我可以说你更好吗

于 2013-07-11T15:38:46.963 回答