程序化NSLayoutConstraints在一个字符串中

时间:2013-01-17 22:43:57

标签: objective-c nslayoutconstraint

有没有办法将3个以下的语法行合并为一个语句(如果不起作用):

[_cardsContainer addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[cardContainer1]|[cardContainer2]|[cardContainer3]|" options:0 metrics:nil views:viewsDictionary]];

1. [_cardsContainer addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[cardContainer1]|" options:0 metrics:nil views:viewsDictionary]];
2. [_cardsContainer addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[cardContainer2]|" options:0 metrics:nil views:viewsDictionary]];
3. [_cardsContainer addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[cardContainer3]|" options:0 metrics:nil views:viewsDictionary]];

3 个答案:

答案 0 :(得分:3)

不,但你可以用两行来完成:

[_cardsContainer addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[cardContainer1]|" options:0 metrics:nil views:viewsDictionary]];

此针卡容器1位于superview的顶部和底部。然后:

[_cardsContainer addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[cardContainer1][cardContainer2][cardContainer3]|"  options:NSLayoutFormatAlignAllTop | NSLayoutFormatAlignAllBottom metrics:nil views:viewsDictionary]];

其中对齐剩余卡片容器的顶部和底部。

这假设您希望彼此相邻的视图,您实际上没有指定任何水平布局细节。

使用可视化格式来思考视图格式语言的每一行代表视图中的单行或一列布局时,它会有所帮助。

答案 1 :(得分:1)

据我所知,没有。

答案 2 :(得分:1)

这不是一条线,但你可以通过循环来减少三条线的重复:

for (NSView *view in @[cardContainer1, cardContainer2, cardContainer3]) {
    [_cardsContainer addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[view]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(view)]];
}