ビジュアルフォーマット言語を使用してビューをスーパービューの中央に配置する 質問する

ビジュアルフォーマット言語を使用してビューをスーパービューの中央に配置する 質問する

私は iOS 用の AutoLayout を学び始めたばかりで、Visual Format Language を調べてみました。

1 つを除いてすべて正常に動作します。スーパービュー内でビューを中央に配置することができません。
これは VFL で可能ですか、それとも制約を手動で作成する必要がありますか?

ベストアンサー1

現時点では、スーパービューでビューを中央に配置することはできないようです。のみVFL。ただし、単一の VFL 文字列と単一の追加制約 (軸ごと) を使用してこれを行うのはそれほど難しくありません。

VFL:"|-(>=20)-[view]-(>=20)-|"

[NSLayoutConstraint constraintWithItem:view
                             attribute:NSLayoutAttributeCenterX
                             relatedBy:NSLayoutRelationEqual
                                toItem:view.superview
                             attribute:NSLayoutAttributeCenterX
                            multiplier:1.f constant:0.f];

単純にこれを行うことができると思われるかもしれません (この質問を見たときに私が最初に考えて試したのもこれです)。

[NSLayoutConstraint constraintsWithVisualFormat:@"|-(>=20)-[view(==200)]-(>=20)-|"
                                 options: NSLayoutFormatAlignAllCenterX | NSLayoutFormatAlignAllCenterY
                                 metrics:nil
                                   views:@{@"view" : view}];

私は上記のさまざまなバリエーションを試して、自分の意志に沿うようにしようとしましたが、両方の軸に2つの別々のVFL文字列を明示的に設定しても、スーパービューには適用されないようです(H:|V:)。その後、オプションが正確にいつ適用されるかを特定しようとしました。するVFLに適用され、ないVFL のスーパービューに適用され、VFL 文字列で指定されている明示的なビューにのみ適用されます (場合によっては期待外れになります)。

将来、Apple が何らかの新しいオプションを追加して、VFL オプションでスーパービューを考慮に入れるようにしてくれることを期待しています。ただし、VFL にスーパービュー以外の明示的なビューが 1 つしかない場合に限られます。別の解決策としては、次のような別のオプションを VFL に渡すことが考えられますNSLayoutFormatOptionIncludeSuperview

言うまでもなく、私はこの質問に答えようとしながら VFL について多くのことを学びました。

おすすめ記事