gpt4 book ai didi

ios - 如何在具有自动布局的 Interface Builder 中创建的现有 View 中添加 View ?

转载 作者:行者123 更新时间:2023-11-28 13:15:41 25 4
gpt4 key购买 nike

我在 Interface Builder 中创建了以下自动布局:

enter image description here

如您所见,我没有为按钮提供任何固定大小。我想以编程方式添加两个按钮以获得此结果:

enter image description here

以编程方式添加约束我知道该怎么做,至少我知道语法。

我的问题是什么时候创建这些按钮?

我根据按钮 4 的宽度创建宽度约束。如果我在 viewDidLoad 中执行此操作(如果我没记错的话),则自动布局尚未设置,因此宽度(和高度)将为错误的。

我想在 viewDidLayoutSubviews 中执行此操作,但由于在加载 viewController 时多次调用它,我得到多个按钮堆叠在一起,当我转到横向时,添加了更多按钮..

我应该在什么时候创建这些按钮以使其具有正确的尺寸?

最佳答案

自动布局是关于始终适用的规则,而不是(主要)在任何时刻的框架大小。

当您为按钮 5 和 6 设置约束时,您不应该关心获取按钮 4 的框架。您为按钮 5 和 6 添加的约束应该引用按钮 4 的宽度属性,而不是其当前宽度(以磅为单位) .也就是说,您可以创建这样的约束:

NSLayoutConstraint* constraint = [NSLayoutConstraint constraintWithItem:button5 attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:button4 attribute:NSLayoutAttributeWidth multiplier:1 constant:0];
constraint.active = YES; // OR: [button5.superview addConstraint:constraint]

这是一个约束,即使按钮 4 的宽度发生变化,它也会使按钮 5 的宽度与按钮 4 的宽度相同。您可以对高度和按钮 6 等执行相同的操作。

换句话说,您在运行时创建的约束应该类似于您在设计时在 IB 中创建的约束。在我看来,您并没有在按钮 4 上创建明确的、固定的高度和宽度约束。您已经创建了将其高度和宽度与其他 View 相关联的相对约束。

您必须做的一件事:由于按钮 2 和 4 对容器(或其边距)有尾随空间限制,因此您需要在添加按钮 5 和 6 时删除这些限制。按钮 2 和 4 将具有分别对按钮 5 和 6 具有尾随约束,而按钮 5 和 6 必须对容器具有尾随约束。实际上,您应该通过取消按钮 4 对容器的尾部约束并将其替换为按钮 2 的尾部对齐约束来进行简化。同样,按钮 6 的尾部边缘应与按钮 5 的尾部边缘对齐,而不是与 super View 的间隔开。这样一来,您只需删除一个约束(按钮 2 落后于 super View )并添加一个约束(按钮 5 落后于 super View )。

关于ios - 如何在具有自动布局的 Interface Builder 中创建的现有 View 中添加 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29091477/

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