iOS Autolayout, um meine Ansicht zwischen zwei Ansichten zu zentrieren

77

So richten Sie das automatische Layout in Interface Builder ein, um Ansichten vertikal anzuordnen, wie im Bild gezeigt:

planen

Top viewan der oberen Bildschirmkante Bottom viewbefestigt, an der unteren Bildschirmkante befestigt. My viewsollte zwischen Draufsicht und Unteransicht zentriert sein (also Abstand zu Top viewentspricht gleich Abstand zu Bottom view)

Brigadir
quelle

Antworten:

110

Der Weg, dies zu tun, besteht darin, 2 unsichtbare "Spacer" -Ansichten zwischen Ihren sichtbaren Ansichten zu haben.

Sie können Leerzeichen nicht gleich hoch machen. Sie verwenden jedoch die "Spacer" -Ansichten und platzieren sie zwischen Ihren Ansichten (mit 0 Lücken zu den umgebenden Ansichten).

Dann geben Sie diesen Ansichten gleiche Höhen und sie verschieben Ihre Ansichten, um die My Viewmit gleichem Abstand zum Bottom Viewund zu zentrieren Top View.

dh so ...

V:|[Top View][spacer1][My View][spacer2(==spacer1)][Bottom View]|

EDIT - Ein anderer Weg

Ich habe mir gerade einen anderen Weg überlegt. Sie könnten einen unsichtbaren Container haben UIView, der zwischen Top Viewund Bottom Viewohne Lücke liegt.

Dann platzieren Sie My Viewdiese unsichtbare Ansicht und zentrieren sie vertikal.

Fogmeister
quelle
1
Warum nicht einfach die Höhe von oben und unten gleich halten und die mittlere Ansicht im übergeordneten Element zentrieren?
Antonio E.
5
Nun, das würde funktionieren. Nur dass das nicht die Frage ist. Das Bild in der Frage zeigt deutlich die Draufsicht und die Unteransicht mit unterschiedlichen Höhen. Außerdem wird gefragt, ob eine Ansicht genau zwischen zwei Ansichten zentriert werden soll. Es wird nicht gefragt, ob eine Ansicht in der Übersicht zentriert werden soll.
Fogmeister
1
@brigadir Ja, in einer der Schaltflächen unten rechts im Interface Builder gibt es Optionen für "Frames aktualisieren, um Einschränkungen anzupassen" und auch "Constraints auf Frames aktualisieren". Du willst diesen zweiten.
Fogmeister
1
Ich denke, er sagte, dass "Ein anderer Weg" besser sei als die ursprüngliche Antwort, nicht dass es einen dritten Weg gäbe, der besser wäre. :)
James Richard
2
Ich habe gerade Ihren anderen Weg benutzt, unglaublich einfach einzurichten, danke!
user3344977
45

Eine weitere Lösung besteht darin, eine unsichtbare Ansicht zwischen Draufsicht und Botom-Ansicht hinzuzufügen und meine Ansicht in die Mitte dieser Ansicht zu platzieren:

Zentriertes UIView

anatoliy_v
quelle
1
So ein genialer Hack! Vielen Dank
Maximelc
15

(5 Jahre später) Ich habe die kanonischste Lösung gefunden:

UILayoutGuide wurde speziell eingeführt, um diese Art von Aufgaben zu lösen (seit iOS 9).

Verwenden Sie Layout-Anleitungen, um die Dummy-Ansichten zu ersetzen, die Sie möglicherweise erstellt haben, um Zwischenansichtsräume oder Kapselungen in Ihrer Benutzeroberfläche darzustellen - Ref docs

Es funktioniert ziemlich gut im Code, aber leider unterstützt Interface Builder keine benutzerdefinierten Layout-Anleitungen.

Brigadir
quelle
-1

Dieses Video bietet einen erstaunlichen Überblick über das automatische Layout und die Einschränkungen im Interface Builder: https://www.youtube.com/watch?v=1j-Frd5snYc

user3474985
quelle