2013-07-21 3 views
5

Zum Beispiel Etiketten A, B und C. Label A sollte die Breite des jeweils haben breiter, B oder C.Wie füge ich eine Einschränkung hinzu, so dass eine Ansicht so breit ist wie die breiteste von zwei anderen Ansichten?

Optisch etwas entlang der Linien von

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

mögliches Duplikat von [Höhe des Autlayouts gleich MAX (mehrere Ansichtshöhen)] (http://stackoverflow.com/questions/17117799/autolayout-height-equal-to-maxmultiple-view-heights) –

Antwort

1

Wenn Sie sicherstellen möchten, dass viewA gleichzeitig mindestens so breit wie viewB und viewC ist, verwenden Sie dann zwei separate VFL-Anweisungen, @"H:[viewA(>=viewB)]" und @"H:[viewA(>=viewC)]".

Wenn Sie wollen auch sicherstellen, dass A als die maximale Breite von viewB und/oder viewC nicht breiter sein wird, würden Sie eine optionale Einschränkung (dh niedrigere Priorität als UILayoutPriorityRequired) für die Breite der viewA, um gleich einen definieren von ihnen, zum Beispiel:

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]; 

Gemäß der Dokumentation für priority:

Wenn eine Einschränkung 'a == b' ist optional, das Constraint-basierte Layout-System wird versuchen, "zu minimieren abs (a-b) ".

Wenn also viewB größer als viewC ist, diese optionale Einschränkung wird erfüllt und viewA wird so breit wie viewB sein. Wenn viewB kleiner als viewC ist, erfüllt das Einschränkungssystem die erforderliche @"H:[viewA(>=viewC)]"-Einschränkung, minimiert dann aber auch die abs(a-b) und macht viewA genauso breit wie viewC.

In der Praxis werden Sie wahrscheinlich nicht brauchen, diese optionale viewA==viewB Einschränkung, aber wenn Sie sicherstellen wollen, dass viewA nicht breiter sein sowohl als viewB und viewC, dann diese letzte optionale Einschränkung hinzufügen.

Verwandte Themen