修改UIViewController.frame时约束条件已更改

时间:2012-11-09 14:14:27

标签: ios uiviewcontroller constraints autolayout

我有一个UIViewController,我作为一个孩子将其添加到另一个UIViewController。添加子项时,父项使用childVC.frame = ....在我的孩子上设置框架,但这会影响我的约束。

我可以轻松地在IB中复制此问题。创建一个UIViewController,将大小更改为“自由格式”并抛弃状态栏(只是看起来直观)。添加UIButton(或任何)和约束,使它们的大小相同(见下图) enter image description here

现在更改视图控制器中顶级视图的大小,并观察会发生什么。 enter image description here

它改变了我对我的限制。我希望我的按钮变大,仍然保持原始约束。如果您在屏幕上的iPhone视网膜3.5 / 4.0之间切换或从横向更改为纵向,则会自动发生。但是,当我调整视图大小时,为什么不呢?这样做会让王室痛苦地以自由形式进行布局并测试不同尺寸。

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

1 个答案:

答案 0 :(得分:1)

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

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

相反,您现在必须使用自动布局来更新childVC.frame的大小。通过在IB中创建IBOutletchildVC的宽度约束来做到这一点。同样,创建另一个IBOutlet高度约束childVC

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

myWidthConstraint.constant = 123.f;

执行此操作的位置在控制器的updateViewConstraints方法中,或者在视图的情况下,updateConstraints

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

我可以说你更好吗

相关问题