可以这样想:如果您可以使用 Interface Builder 中的 Autolayout 来做到这一点,那么您也可以使用 Visual Format Language 来做到这一点。
但是,对于您建议的用例,您必须在多个语句中描述约束:
field
设置和的水平相同label
- 设置从 superview 顶部到字段的 40 px 垂直空间和 10 px 到
otherStuff
总体上需要的是,对于每个子视图,所有 4 个必要的放置值(x、y、宽度和高度)都被明确定义。
我通过代码实现自动布局的一般方法是编写一个自定义库,其方法与 Interface Builder 中的单个约束所做的事情相同。以下是一些示例方法签名:
+(void)addFixedHeightConstraintToView:(UIView*)view height:(CGFloat)height;
+(void)addTopMarginFromSuperviewConstraintToView:(UIView*)view topMargin:(CGFloat)topMargin;
+(void)addHorizontalSpaceConstraintFromView:(UIView*)fromView toView:(UIView*)toView horizontalSpace:(CGFloat)hSpace;
这些方法都是用非常简单易懂的 VFL 定义的。一旦有了这些,我就可以轻松解决您描述的用例。这是一些示例代码:
[CustomAutoLayout addTopMarginFromSuperviewConstraintToView:field topMargin:40];
[CustomAutoLayout addTopMarginFromSuperviewConstraintToView:label topMargin:40];
[CustomAutoLayout addHorizontalSpaceConstraintFromView:field toView:label horizontalSpace:0];
[CustomAutoLayout addVerticalSpaceConstrantFromView:field toView:otherStuff verticalSpace:10];