iOS Autolayout: zwei gleich breite Schaltflächen nebeneinander

92

Ich habe derzeit Probleme mit AutoLayout. Ich verwende den Interface Builder und versuche, zwei gleich breite Schaltflächen nebeneinander zu positionieren, wie in der folgenden Abbildung dargestellt.

objektives Layout

In der folgenden Vorschau wurde mein titleImage ordnungsgemäß eingeschränkt und wird korrekt angezeigt, die Schaltflächen jedoch nicht. Ich habe experimentiert, indem ich Schaltfläche 1 an der Vorderkante von titleImage und Schaltfläche 2 an der Hinterkante von titleImage ausgerichtet habe. Die Breitenverteilung zwischen den beiden Schaltflächen wird jedoch an dieser Stelle verzerrt, wie unten gezeigt.

Problemszenario

Mein Ziel ist es zu verstehen, welche Einschränkungen fehlen und auf die beiden Schaltflächen angewendet werden sollten, um unabhängig vom Gerät die gleiche Breite beizubehalten. Wenn möglich, möchte ich dies durch Interface Builder im Gegensatz zu zusätzlichem Code erreichen.

Scratcha
quelle
1
Mauerwerk ist eine empfohlene Methode, um dies programmgesteuert zu tun. Link: github.com/Masonry/Masonry
Itachi
1
Hier ist der Link ... Sie können überprüfen ... stackoverflow.com/questions/29620409/…
EI Captain v2.0

Antworten:

246

Fügen Sie die folgenden Einschränkungen hinzu

  1. Weisen Sie von button1 bis button2 die gleiche Breite zu.
  2. Weisen Sie einen horizontalen Abstand zwischen beiden Schaltflächen zu.
  3. Weisen Sie der Übersicht einen führenden Bereich von button1 zu.
  4. Weisen Sie der Übersicht 2 den nachgestellten Platz von button2 zu.
  5. Weisen Sie beiden Schaltflächen den oberen Bereich zu.
    Lassen Sie mich wissen, ob es für Sie funktioniert.
Abubakr Dar
quelle
7
Ausgezeichnet - das hat bei mir funktioniert. Insbesondere Punkt 2 - Hinzufügen eines horizontalen Abstands.
Scratcha
WoW !!! Was meinst du ich? Es funktioniert wirklich wie ein Zauber und ich bin ungefähr 3 Stunden verschwendet worden! :( In meinem Fall hatte ich zwei Ansichten gleicher Breite in der Superansicht, die sie teilten. Am Ende wurde ich jedoch gefragt: "Benötigt Einschränkungen für Y oder Höhe". Ich entschied mich für "Fehlende Einschränkungen hinzufügen" und es wurde aufgelöst.
Randika Vishman
@Abubakr: Es funktioniert nur für eine Bildschirmgröße, da beide Schaltflächen die gleiche Breite haben.
AG
1
Funktioniert auch für mehr als 2 benachbarte UI-Elemente!
Belagerung_Perilous
1
Nun, danke, aber ich habe die Lösung gefunden und sie ist besser im Code. Geben Sie einem der Zentren eine Ausrichtung zum übergeordneten Element und geben Sie die konstante Hälfte der Inhaltsgröße an, die Sie im Code berechnen können. Wenn der Inhalt statisch ist, können Sie einfach Frames aktualisieren und die Konstante aktualisieren. Fügen Sie dazu auch die Hälfte des Mittelabstands zwischen zwei Schaltflächen zu dieser Mittelausrichtung hinzu. Und geben Sie einfach das Führende oder Nachlaufende auf die andere Schaltfläche. Behebt das für mich. Wenn Ihr Inhalt intrinsisch ist und aktualisiert werden muss, rufen Sie einfach die Layoutaktualisierungsmethode auf und berechnen Sie den konstanten Wert erneut.
Amber K
79

Befolgen Sie die Schritte und Screenshots, um eine einfache Lösung zu finden


Schritt 1)

  • Für Schaltfläche 1: Festlegen von Einschränkungen: (1) Führen, (2) Oben oder Unten je nach Bedarf, (3) Höhe


Schritt 2)

  • Für Schaltfläche 2: Einschränkungen festlegen: (1) Nachlauf, (2) Oben oder Unten je nach Bedarf, (3) Höhe

Schritt 3)

  • Drücken Sie Strg + Ziehen von Taste 1 auf Taste 2

  • Wählen Sie Horizontaler Abstand


Schritt 4)

  • Wählen Sie die Schaltfläche Beide (mit Befehl) und fügen Sie Einschränkungen mit gleicher Breite hinzu


AUSGABE

Hoffe es hilft dir :)

Vvk
quelle
1
Die Höhe sollte nicht festgelegt werden. Lassen Sie die Ansicht die Höhe der Schaltfläche entsprechend der Bildschirmgröße bestimmen.
Kunal Kumar
@KunalKumar dieser Fall Höhe ist fest. Kannst du mir bitte sagen, was du willst?
Vvk
@ Vvk ... perfekter Bruder :)
Jaywant Khedkar
18

Stack-Layout in iOS9, wird den Job wirklich gut machen. Fügen Sie Ihrer Ansicht die Stapelansicht hinzu und konfigurieren Sie sie wie folgt:

Geben Sie hier die Bildbeschreibung ein

Ben
quelle
2

Sie können mein Beispiel überprüfen - Sie können dies leicht zielen, indem Sie eine proportionale Einschränkung verwenden. Sie können auch einfach proportional mehrere UIViews zielen. Bitte schauen Sie sich das beigefügte Beispiel an

https://dl.dropboxusercontent.com/u/48223929/TestViewController.xib

Vitaliy Gozhenko
quelle
0

Meine Lösung ist zu

  1. Stellen Sie eine kleine Ansicht in die Mitte von zwei Schaltflächen und machen Sie sie zentriert (horizontale Mitte im Container und vertikale Mitte im Konkurrenten als 0).
  2. Fügen Sie der kleinen Ansicht Höhe und Breite hinzu.
  3. Fügen Sie Schaltflächen die Einschränkungen hinzu und geben Sie der kleinen Ansicht horizontale Platzbeschränkungen.
  4. Geben Sie der Hintergrundfarbe der kleinen Ansicht die gleiche wie den Schaltflächen oder der Farbe der Ansicht.

Hinweis: Siehe Screenshot.

Geben Sie hier die Bildbeschreibung ein

AG
quelle