1

以下の 3 つの構文行を次のような 1 つのステートメントに結合する方法はありますか (これは機能しません)。

[_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]];
4

3 に答える 3

3

いいえ。ただし、次の 2 行で実行できます。

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

これにより、カード コンテナー 1 がスーパービューの上部と下部に固定されます。それで:

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

これにより、残りのカード コンテナーの上下が揃えられます。

これは、ビューを隣り合わせに配置することを前提としており、実際には水平レイアウトの詳細を指定していません。

ビジュアル フォーマットを使用する場合、ビュー内のレイアウトの 1 行または 1 列を表すビジュアル フォーマット言語の各行について考えると役立ちます。

于 2013-01-17T23:17:54.117 に答える
1

これは実際には 1 行ではありませんが、ループで 3 行を実行することにより、3 行の重複を減らすことができます。

for (NSView *view in @[cardContainer1, cardContainer2, cardContainer3]) {
    [_cardsContainer addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[view]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(view)]];
}
于 2013-01-17T23:39:57.433 に答える
1

私の知る限り、いいえ。

于 2013-01-17T22:51:14.527 に答える