gpt4 book ai didi

iOS:同时更新约束和框架

转载 作者:行者123 更新时间:2023-12-01 16:09:05 25 4
gpt4 key购买 nike

我的应用程序中有一个 UITextField在左边和一个 UIButton在右侧。文本字段锚定在 super View (容器 View )的左侧和按钮的右侧。
所以在文本字段的左边有一个

leading space = 0 in relation of container



在右边

trailing space = 0 in relation of button



但是如果我以正确的方式移动按钮,改变 x 原点值,为什么文本字段不扩大它的宽度?

(显然,按钮有其关于宽度和高度以及位置的限制,但不是锁定文本字段)

所以如果我这样做
self.mybutton.frame = CGRectMake(self.mybutton.frame.origin.x+100, self.mybutton.frame.origin.y, self.mybutton.frame.size.width, self.mybutton.frame.size.height);

按钮向正确的方向移动,但文本字段似乎没有扩大其宽度。
你知道为什么吗?

最佳答案

同时使用自动布局和程序化定位/调整大小会让人头疼。部分原因是您在 Auto Layout 中创建了约束,这基本上是您的应用在布局所有 View 时必须遵循的“规则”,并且当您更改框架、边界或中心属性时,您可能会使这些规则无效.但是由于 Auto Layout 不会不断地重新计算 View 的布局,因此在触发布局重新计算之前,问题可能会被忽视。

因此,要回答您的问题,更改按钮的框架不会更改文本,因为自动布局不知道有任何更改。另外,您还没有更改按钮上的约束,所以如果您确实调用了 - (void) setNeedsUpdateConstraints在您的文本字段和按钮上,您正在寻找的更改不会发生。该按钮将移回其初始位置,即您设置的约束位置。

您可能想要做的是创建一个 IBOutlet在任何控制按钮如何定位在 x 轴上的东西上(即它的尾随空间......如果你正在使用它)。然后,而不是这样做:

self.mybutton.frame = CGRectMake(self.mybutton.frame.origin.x+100, self.mybutton.frame.origin.y, self.mybutton.frame.size.width, self.mybutton.frame.size.height);

您可以执行以下操作:
self.mybuttonXconstraint.constant = self.mybuttonXconstraint.constant + 100
[self.parentView setNeedsUpdateConstraints]

第二行是确保 Auto Layout 知道约束已更改,并且它应该重新计算涉及父约束的任何 View 的布局。

您可能也会对此感兴趣 - iOS Developer Library - Auto Layout Guide

关于iOS:同时更新约束和框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37199434/

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