自动布局 - 以编程方式定义异常约束
Posted
技术标签:
【中文标题】自动布局 - 以编程方式定义异常约束【英文标题】:Auto Layout - programatically defining unusual constraints 【发布时间】:2013-11-30 16:17:38 【问题描述】:我正在尝试寻找一些相对非标准布局的示例,但我找到的所有文档都只给出了居中或与超级视图边框对齐的示例,或者给出了固定数字作为空格和大小。 您能否就以编程方式定义以下约束提供建议:
一个。对角线视图:
B。将视图放在它的超级视图边框的第三个(或其他一些不是中间的比例)
C。父视图边界的两个标准空格(如 |-[v1],但有双空格)
任何讨论类似案例的文档也将受到高度赞赏:)
提前致谢!
【问题讨论】:
如果您真的想掌握这个主题,请获取一些专家资料,例如 Erica Sadun 的书或 Matt Neuburgs ios 7 的书。我得到了两个,因为我们将阅读并重新阅读 Apple 指南。 【参考方案1】:您可以使用详细的NSLayoutContraint
方法来创建任何不能用视觉格式语言表达的约束。
A:您需要两个准确描述您想要的约束条件。在这种情况下,您希望 v1 的上边缘和 v2 的下边缘相同。左右边缘也是如此。
NSLayoutConstraint *constraint;
constraint = [NSLayoutConstraint constraintWithItem:v1
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:v2
attribute:NSLayoutAttributeBottom
multiplier:1.0
constant:0.0];
[self.view addConstraint:constraint];
constraint = [NSLayoutConstraint constraintWithItem:v1
attribute:NSLayoutAttributeRight
relatedBy:NSLayoutRelationEqual
toItem:v2
attribute:NSLayoutAttributeLeft
multiplier:1.0
constant:0.0];
[self.view addConstraint:constraint];
B:这次你希望 v1 和 v2 的上边缘相同:
NSLayoutConstraint *constraint;
constraint = [NSLayoutConstraint constraintWithItem:v2
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:v1
attribute:NSLayoutAttributeTop
multiplier:1.0
constant:0.0];
[self.view addConstraint:constraint];
橙色视图的水平位置使用什么约束,取决于你想要什么。你想在蓝色视图的右边缘有一个固定的边距吗?
constraint = [NSLayoutConstraint constraintWithItem:v2
attribute:NSLayoutAttributeLeft
relatedBy:NSLayoutRelationEqual
toItem:v1
attribute:NSLayoutAttributeLeft
multiplier:1.0
constant:rightMargin];
[self.view addConstraint:constraint];
C:我认为你不能指定这样的双倍空格。您可以使用一个丑陋的技巧,并在标准空间之间插入一个不可见(宽度为 0)的视图,如下所示:
|-[invisibleView(0)-[v1]
或者你可以计算出标准边距是多少,然后使用两倍的值作为常数:
|-(doubleMargin)-[v1]
【讨论】:
对于示例 B 中的水平位置,您可以在父视图的右侧使用 0.33 的乘数参数(和一个常数 0),这会将视图的 1/3纵向和横向都从左边距开始。以上是关于自动布局 - 以编程方式定义异常约束的主要内容,如果未能解决你的问题,请参考以下文章