gpt4 book ai didi

ios - 修改 UIViewController.frame 时约束发生变化

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:47:27 27 4
gpt4 key购买 nike

我有一个 UIViewController,我小时候将它添加到另一个 UIViewController。添加子项时,父项使用 childVC.frame = .... 为我的子项设置框架,但这会破坏我的约束。

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

现在更改 View Controller 中顶层 View 的大小并观察会发生什么。 enter image description here

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

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

最佳答案

基于框架的计算和自动布局不兼容。或者至少,它们意味着惊涛骇浪。这就是你遇到问题的原因。切换到自动布局后,您必须接受您不再直接操作 frame

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

相反,您现在必须使用自动布局来更新 childVC.frame 的大小。为此,在 IB 中创建一个 IBOutlet,它是 childVC 的宽度约束。同样,创建另一个 IBOutlet,即 childVC 高度约束。

在您的 View Controller 中,更新 constant 值以更改大小。

myWidthConstraint.constant = 123.f;

执行此操作的位置在 Controller 的 updateViewConstraints 方法中,或者在 View 的情况下,在 updateConstraints 中。

也就是说,最好设置自动布局,这样您就不需要任何编程更新。正确定义后,它将知道如何处理 View 边界变化的事情。老实说,只有当您想做一些不寻常的事情时,才需要以编程方式更新尺寸。

我能说你更好吗

关于ios - 修改 UIViewController.frame 时约束发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13309692/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com