Mitte zwei Ansichten vertikal mit NSLayoutConstraint
Stellen Sie sich das folgende Szenario. Sie haben eine UIImageView und einen UIButton. Die erste ist 300x360, die zweite ist 210x70. Die imageview
enthält einen Katalog Bild, das button
sagt "Katalog öffnen".
Ich würde gerne die position der Elemente in der Hauptansicht, die nach diesen Anforderungen:
- die beiden Elemente werden horizontal zentriert, nämlich in der Mitte.x-Koordinaten sollten alle gleich (Blick, Bild und button);
- die beiden Elemente werden vertikal zentriert in der folgenden Weise: separator (flexibel) - Bildansicht - separator (fixed, sagen wir, 30 pts) - button - separator (flexibel). Dem obersten und dem untersten separator sollte die gleiche Größe besitzen (dies ist die Bedeutung von,, zentriert).
Kann ich nicht machen dies, um die Arbeit mit NSLayoutConstraint.
So weit, was ich Tat, wurde die Zentrierung der X-Koordinate der beiden Elemente mit NSLayoutAttributeCenterX
und NSLayoutRelationEqual
den gleichen view
Attribut.
Den letzten Teil, nach meiner Idee, zu befestigen Ihre vertikale Ausrichtung.
Ich habe versucht, mit @"V:|-[imageview(360)]-[button(70)]-|"
aber es funktioniert nicht (Unable to simultaneously satisfy constraints.
).
Wenn ich @"V:|-[imageview(360)]-[button]-|"
ich alles bekommen, was teilweise ok. Nämlich, der Obere Teil ist perfekt, aber der button ist gestreckt, so dass die Lücke zwischen den internen separator und dem unteren Rand der Ansicht.
Wie kann ich diese Elemente mit fester Größe und lassen Sie Auto-layout, um nur herauszufinden, wie man Sie in den Blick?
InformationsquelleAutor Fabiano Francesconi | 2013-06-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
War ich in der Lage, es zu tun von etwas wie dies:
Der schwierige Teil ist der Konstante Wert. Dieser Wert ist die Hälfte der Höhe aller Ansichten, einschließlich Ihrer Trennzeichen. Dies bedeutet, dass, wenn die Bildansicht Höhe ist 360, die Taste, die Höhe ist 70 und der separator-60, die Konstante wird (360 + 70 + 60)/2 = 245.
Sollte es eine intelligentere Art und Weise, in der Tat, aber für jetzt ich denke, das ist ok.
Nein, der Multiplikator angewendet wird, um das selbst.Blick.frame.Herkunft.y-Wert und die Konstante Hinzugefügt wird Z-Wert. Ich werde jetzt umschreiben, dass es die Verwendung von Variablen.
Dies funktioniert bei mir auch, danke!
InformationsquelleAutor Fabiano Francesconi
Es gibt zwei Möglichkeiten, dies zu nähern.
Als @uchuugaka schon sagt, Stelle deine Bildansicht und button in einem container anzeigen. Sie haben nicht die gleiche Zentrierung problem, wenn die Untersichten sind fixiert, die Kanten der container (die Sie die Größe entsprechend der Höhe wäre 360 + 30 + 70 == 460. Dann können Sie center container ist in Ihrer Ansicht mit einem einfachen align-center-Y-Einschränkung.
Können Sie spacer Ansichten. Durch hinzufügen von zwei versteckte Ansichten können Sie Einschränkungen angeben, um Sie zu fixieren oben/unten deine Bildansicht und Knopf, mit gleichen Höhen wie Sie wirken als Federn. Hier ist der code, der dies tut, mit Ihren Dimensionen:
Spacer Ansichten oder einen extra-container anzeigen, es sei denn, Sie wissen, die (festen) Höhe im Voraus. Oh, gut. 🙂
InformationsquelleAutor TomSwift
Sie brauchen, um Ihre vertikalen Abstände, die gleich oder größer als oben auf dem Bild Sicht-und Unterseite der Taste.
Aber das klingt auch so, als wäre es einfacher, einfach auf weitere anzeigen, enthält Ihr Bild und button. Dann-center, die anzeigen V und H in der super Aussicht.
Auto-Layout bedeutet immer noch container Ansichten manchmal.
Überhaupt nicht. Der container kann eingeschränkt werden, um oben auf der ein sub-view und unten der andere.
Sind Sie richtig. Wenn Sie die Höhe des Containers auf die Summe aller Höhen (und die Separatoren), dann bekommen Sie eine gute Lösung gibt. Ich weiß nicht, wie sehr Sie die Idee, eine Ergänzende Sicht gibt, aber ich denke, die Lösung ist vielleicht einfacher zu verstehen, im Vergleich zu mir.
Ich kann nicht sagen, einer ist besser. Es gibt trade-offs der jeweiligen Lösung. Auto-layout ist noch jung.
InformationsquelleAutor uchuugaka