如何使用自动布局的 Masonry DSL 定义视图之间的垂直和水平关系?
How do you define the vertical and horizontal relationship between views using the Masonry DSL for Auto Layout?
使用 Apple 的可视格式语言,使用 spacers 设置视图及其父视图之间的水平和垂直关系非常简单。
如果我希望下面的可视化示例中的 view2 具有固定宽度,而 view1 将填充剩余的 space。对于 VFL,我将按如下方式指定此行为:
|-[view1]-[view2(==100)-|
对于 Masonry,如何在视图之间建立这些关系并不明确; view1 不是 view2 的 'aware',并且会低于或重叠它。我错过了什么?
视图仍然是 'aware' 彼此。关键是将view2的左边缘固定到view1的右边缘:
[view1 mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.bottom.left.equalTo(containerView);
}];
[view2 mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.bottom.equalTo(containerView);
make.left.equalTo(view1.mas_right);
make.right.equalTo(containerView);
make.width.equalTo(@100);
}];
使用 Apple 的可视格式语言,使用 spacers 设置视图及其父视图之间的水平和垂直关系非常简单。
如果我希望下面的可视化示例中的 view2 具有固定宽度,而 view1 将填充剩余的 space。对于 VFL,我将按如下方式指定此行为:
|-[view1]-[view2(==100)-|
对于 Masonry,如何在视图之间建立这些关系并不明确; view1 不是 view2 的 'aware',并且会低于或重叠它。我错过了什么?
视图仍然是 'aware' 彼此。关键是将view2的左边缘固定到view1的右边缘:
[view1 mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.bottom.left.equalTo(containerView);
}];
[view2 mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.bottom.equalTo(containerView);
make.left.equalTo(view1.mas_right);
make.right.equalTo(containerView);
make.width.equalTo(@100);
}];