Interface Builder 中的相对自动布局约束

Posted

技术标签:

【中文标题】Interface Builder 中的相对自动布局约束【英文标题】:Relative Auto Layout Constraints in Interface Builder 【发布时间】:2013-05-20 16:04:47 【问题描述】:

在代码中,我可以在两个对象之间设置约束,使它们是相对的...

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:item1
                                                      attribute:NSLayoutAttributeWidth
                                                      relatedBy:NSLayoutRelationEqual
                                                         toItem:item2
                                                      attribute:NSLayoutAttributeWidth
                                                     multiplier:0.9
                                                       constant:0]];

或者说他们有一个恒定的差异......

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:item1
                                                      attribute:NSLayoutAttributeWidth
                                                      relatedBy:NSLayoutRelationEqual
                                                         toItem:item2
                                                      attribute:NSLayoutAttributeWidth
                                                     multiplier:1.0
                                                       constant:-30]];

或事件,以便它们关联同一项目的不同属性...

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:item1
                                                      attribute:NSLayoutAttributeWidth
                                                      relatedBy:NSLayoutRelationEqual
                                                         toItem:item1
                                                      attribute:NSLayoutAttributeHeight
                                                     multiplier:1.0
                                                       constant:0]];

是否可以使用 Interface Builder 应用这些类型的约束?

【问题讨论】:

"Width equals height" constraint in Interface Builder的可能重复 啊,找不到。谢谢。为 WWDC 祈祷。 【参考方案1】:

现在可以在 XCode 5.1 中使用。

这是对 5.0 的更改。当您添加例如“等宽”约束时,您现在可以转到检查器,有一个新字段,您可以在其中输入乘数值(以及其他新内容),从而创建一个可以与其容器相关的按比例大小的视图或层次结构中的其他视图。

【讨论】:

嗯...这是从 5.0 开始的变化吗?如果是的话,那就太棒了。 是的,它是从 5.0 开始的变化。当您添加例如“等宽”约束时,您现在可以转到检查器,有一个新字段,您可以在其中输入乘数值(以及其他新内容),从而创建一个可以与其容器相关的按比例大小的视图或层次结构中的其他视图【参考方案2】:

在界面生成器中是可能的。选择有问题的 IB 项目并检查其约束。选择和编辑将显示约束的乘数设置。

【讨论】:

现在是的。他们在最新版本的 Xcode 中添加了它。谢谢:D【参考方案3】:

请注意,您也可以输入百分比,例如 50% 侧箭头允许以 0.1 或 1% 递增和递减

设置相对于超级视图(或图像视图)中心 x,y 的 % 乘数(常数 0)非常方便,以便允许标签或文本字段跟踪视图或图像中的特定位置,而不管其最终位置或比例如何。

您可以通过选择主视图并转到: 编辑器 -> 解决自动布局问题 -> 更新框架,不同的元素将根据它们的约束移动。

有时 IB 会即时更新,但通常不会。

【讨论】:

你现在可以,但它只是 Xcode 5 的一部分,还没有推出 :-) 谢谢 :-)

以上是关于Interface Builder 中的相对自动布局约束的主要内容,如果未能解决你的问题,请参考以下文章

Interface Builder 中的自动布局根据外部视图的宽度/高度更改布局

如何在 Interface Builder 中的 UIViewController 中自动调整 UIView Outlet 的大小

在 Interface Builder 中删除自动布局(约束)

如何防止 Xcode/Interface Builder 自动向下移动视图?

Interface Builder 中的 AutoLayout 和 UITableViewCell 原型

我在 Interface Builder 的 Size Inspector 下完全看不到任何东西。我希望能够设置自动