1

我有一个简单的约束,我更愿意使用受 Asci-art 启发的格式来指定它,但是我似乎找不到这样的例子。

NSLayoutConstraint *centerXConstraint = [NSLayoutConstraint constraintWithItem: childView
                                             attribute:NSLayoutAttributeCenterX
                                             relatedBy:NSLayoutRelationEqual
                                                toItem: parentView
                                             attribute:NSLayoutAttributeCenterX
                                            multiplier:1.0f
                                              constant:0.0f]

我尝试了一些东西,例如'|-[childView]-|' 但这只会迫使它在其父级左侧的 X 点。

4

2 回答 2

4

你不能,基本上。视觉格式在它所能实现的方面非常有限,任何复杂的东西要么不起作用,要么接近“一次编写,再也不会理解”的正则表达式级别。布置需要保持彼此之间间距的项目组是可以的,但对于其他任何事情,这是不值得的。

这是一个单一的约束,您已经拥有的代码可以完成正确的工作。我会坚持下去。

如果您经常使用约束,则值得在 UIView 上使用一个类别来简化常见的创建,因为现有代码非常冗长。

于 2012-11-13T17:56:09.263 回答
0

使用可视格式语言可以实现该结果。

此答案中描述了一种方法: https ://stackoverflow.com/a/14917695/1072846

另一种方法是使用“间隔视图”,如Auto Layout Guide的“在视图之间创建相等的间距”部分中所述。

你的 VFL 看起来像这样:

NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(viewToCenter, spacerView1, spacerView2);

[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[spacerView1(=>1)][viewToCenter][spacerView2(=>1)]|" options:0 metrics:nil views:viewsDictionary]`

假设viewToCenter'sintrinsicContentSize已设置。

于 2014-02-27T16:54:50.973 回答