5

たとえば、ラベル A、B、C の場合、ラベル A の幅は、B または C のどちらか広い方の幅にする必要があります。

視覚的には、

@"H:[viewA(==MAX(viewB,viewC))]"
4

1 に答える 1

1

を同時に と の両方とviewA少なくとも同じ幅にしたい場合は、2 つの別個の VFL ステートメント と を使用します。viewBviewC@"H:[viewA(>=viewB)]"@"H:[viewA(>=viewC)]"

viewBA がand/orの最大幅よりも広くならないようにしたい場合は、 の幅がそれらの 1 つと等しくなるようにviewC、オプションの制約 (つまり、 より低い優先度) を定義します。たとえば、次のようになります。UILayoutPriorityRequiredviewA

NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:viewA
                                                              attribute:NSLayoutAttributeWidth
                                                              relatedBy:NSLayoutRelationEqual
                                                                 toItem:viewB
                                                              attribute:NSLayoutAttributeWidth
                                                             multiplier:1.0
                                                               constant:0.0];
constraint.priority = UILayoutPriorityDefaultLow;
[viewA.superview addConstraint:constraint];

のドキュメントによるとpriority

制約「a == b」がオプションの場合、制約ベースのレイアウト システムは「abs(ab)」を最小化しようとします。

したがって、viewBが より大きい場合viewC、このオプションの制約が満たされ、viewAと同じ幅になりviewBます。viewBが よりも小さい場合、viewC拘束システムは必要な拘束を満たします@"H:[viewA(>=viewC)]"が、 も最小化しabs(a-b)、事実上 とviewA同じ幅になりviewCます。

実際には、おそらくこのオプションの制約は必要ありませんが、 がとの両方より広くならないviewA==viewBようにしたい場合は、この最後のオプションの制約を追加してください。viewAviewBviewC

于 2013-07-21T22:16:33.723 に答える