2013-06-14 6 views
21

Angenommen, ich habe eine Ansicht namens container. container enthält 5 UIButtons. Ich möchte eine Höhe NSLayoutConstraint auf container hinzufügen, und diese Höhe sollte gleich NSLayoutHeightAttribute der höchste Button in seinen Unteransichten sein.Autolayout-Höhe gleich MAX (mehrere Ansichtshöhen)

Ich sehe keinen einfachen Weg, dies zu tun. Hat jemand Ideen?

Antwort

33

Sie benötigen für jede Unteransicht (Schaltfläche) eine Einschränkung, die angibt, dass die Höhe des Containers größer oder gleich der Höhe der Unteransicht sein sollte. Geben Sie dieser Einschränkung eine hohe Priorität, z. B. UILayoutPriorityRequired (die ohnehin die Standardeinstellung ist).

Fügen Sie dann eine weitere Einschränkung für die Höhe des Containers hinzu, und geben Sie an, dass die Höhe gleich Null sein soll. Geben Sie dieser Einschränkung eine niedrige Priorität, wie UILayoutPriorityLow. Da das automatische Layout versucht, den Fehler bei nicht erfüllten Einschränkungen zu minimieren, wird der Container so kurz wie möglich gemacht, während alle Einschränkungen mit höherer Priorität weiterhin erfüllt werden.

Ich habe ein Beispiel in this gist gesetzt. Es produziert dieses Ergebnis:

example screen shot

Die blauen Ansichten Höhen behoben haben. Die Tan-Ansicht ist die Superansicht der blauen Ansichten und ihre Höhe ist eingeschränkt, wie ich oben beschrieben habe. Ich steckte den Boden jeder Unteransicht an den Boden des Containers, aber Sie konnten stattdessen die Oberseiten oder die Y-Zentren fixieren.

+0

Super, das hat funktioniert. Obwohl ich ein bisschen verwirrt bin. Wir dürfen dem Container mehrere Höhenbeschränkungen hinzufügen. Wenn ich sage, dass die Höhe des Containers größer als gleich subview1 und auch subview2 sein sollte, warum stehen diese beiden nicht in Konflikt? Außerdem verstehe ich Ihre Argumentation hinter der letzten Einschränkung mit niedriger Priorität nicht. Ich habe es ohne versucht und das hat auch funktioniert. Ist das eine Sicherheitsmaßnahme? – Snowman

+0

Wenn es als ein Layout, das beide Bedingungen erfüllt, gibt es keine Konflikte zwischen den Bedingungen. Die Definition widersprüchlicher Beschränkungen besteht nämlich darin, dass sie nicht beide gleichzeitig erfüllt werden können. Angenommen, Ihre Subviews haben die Höhen 60, 80 und 100. Dann kann * jede * Containerhöhe von 100 oder mehr die Beschränkungen zwischen den Unteransichtshöhen und der Containerhöhe erfüllen, so dass die Constraints nicht miteinander in Konflikt stehen. –

+0

Da jede Containerhöhe von mindestens 100 die Einschränkungen der soeben beschriebenen Teilansichten erfüllt, sind diese Einschränkungen für sich genommen nicht eindeutig: Es gibt mehrere zufriedenstellende Lösungen. Das automatische Layout beschwert sich nicht über Mehrdeutigkeit und kann Ihnen das gewünschte Layout geben. Einige Änderungen an Ihrer App oder an iOS können jedoch dazu führen, dass das automatische Layout ein Layout ergibt, das Sie in Zukunft nicht mehr benötigen. Die zusätzliche Einschränkung mit niedriger Priorität schützt Sie davor. –