我正在尝试查找一些相对非标准布局的示例,但我发现的所有文档仅提供了居中或与superview边框对齐的示例,或者给出了固定数字作为空格和大小。 您能否建议以编程方式定义以下约束:
A 即可。对角线观点:
乙即可。查看它的第三个超视图的边界(或其他一些不是中间的比例)
C 即可。 superview边框的两个标准空间(如此| - [v1],但有双倍空格)
任何讨论类似案例的文件也会受到高度赞赏:)
提前致谢!
答案 0 :(得分: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]