2013-07-21 5 views
5

例えば、A、BおよびCのラベルAは、どちらの幅が広くなっている必要がありますラベルは、BまたはCビューを他の2つのビューの中で最も広いように制約を追加するにはどうすればよいですか?

視覚、

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

[Autolayoutの高さはMAX(複数の高さの高さ)に等しい]の複製可能性(http://stackoverflow.com/questions/17117799/autolayout-height-equal-to-maxmultiple-view-heights) –

答えて

1

の線に沿って何かあなたは確実にしたい場合viewAが同時に少なくともviewBviewCの幅に等しい場合、別の2つのVFLステートメント@"H:[viewA(>=viewB)]"@"H:[viewA(>=viewC)]"を使用します。あなたはまた、AがviewBおよび/またはviewCの最大幅よりも広くないことを確実にしたい場合は

、あなたは1に等しくなるようにviewAの幅のために(UILayoutPriorityRequiredよりもすなわち低い優先順位)オプションの制約を定義しますそれらの、例えば:

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のドキュメントによると:制約「== B」はオプションである場合

は、制約ベースのレイアウトシステムは、「最小化しようとしますabs(a-b) 'である。

viewBviewCより大きい場合したがって、このオプションの制約が満足されるとviewAviewBと同じ幅です。 viewBviewCより小さい場合、制約システムは必要な@"H:[viewA(>=viewC)]"の制約を満たしますが、も最小化し、viewAと同じ幅をviewCとします。

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