Auto-Layout ohne explizite Breite Zwängen und mit größer-oder-gleich-trailing-space Fehlverhalten

Habe ich eine scroll-view enthaltenen Daten werden direkt in der Inhalts-Ansicht einer view-controller in voller Größe in beiden Dimensionen. Die oberen, unteren, vorderen und hinteren Platzverhältnisse aus den Blättern der superview (horizontal) und die layout-Hilfslinien (vertikal) sind alle auf 0 gesetzt. Die VC ist schließlich bedeutete geschachtelt werden als untergeordnete view-controller in einem oder beiden Orten. Ich bin mit einem Storyboard.

Ich habe eine Anzahl von Elementen innerhalb des scroll-view und begrenzt Sie, aber ich bin zu sehen, verschiedene Arten von seltsamen Verhalten. Unten ist ein screenshot mit allen die Untersichten der scroll-Ansicht ausgewählt, um Ihre Einschränkungen. Die scroll-view vier Einschränkungen für die top-level-anzeigen sind nicht sichtbar in ihm. Der view-controller gesetzt wurde, um Freiform-Größe, mit seinen top-level-Sicht (und, dementsprechend, die scroll-view-Inhalte anzeigen) 616 Punkte hoch, die garantiert, dass ein Bildlauf erforderlich sein, zur Laufzeit.

Auto-Layout ohne explizite Breite Zwängen und mit größer-oder-gleich-trailing-space Fehlverhalten

Bevor die Analyse der screenshot, hier ist eine Liste der Dinge, die ich versuche zu erreichen.

  1. Der vertikale Abstand zwischen den Elementen wird vom designer festgelegt und fixiert werden. (BTW, keiner der vertikale Beschränkungen, text-Stile etc. in diesem Drahtgitter sind endgültig noch nicht, das ganze Bild ist nur für illustrative Zwecke.)
  2. Alle Aufkleber (außer den obersten) sollte beginnen, auf Ihre innere Größe, eine Erweiterung auf die Breite der scroll-view (minus die standard-HIG horizontalen Abstand von 20 Punkte auf beiden Seiten).
  3. Tasten sind kaum viel größer sein als diese, aber im Fall der Lokalisierung überraschungen, wir wollen, dass Sie Verhalten sich so wie die Etiketten. (Es gibt eine zusätzliche vertikale ≥ Einschränkung auf "Andere Taste"; es ist irrelevant für diese Frage.)
  4. Der web-Ansicht eine Feste Höhe und Breite bestimmt werden soll durch die Breite der scroll-Ansicht; standard 20 pt horizontalen Raum auf beiden Seiten.
  5. Die text-Ansichten haben eine Mindesthöhe (67 Punkte hier), aber Sie sollten vertikal erweitern, wenn der enthaltene text ist zu groß, um zu passen. Keiner von Ihnen bearbeitet werden können oder Scrollbar. Wie der web-Ansicht, sind Sie horizontal Abstand der standard-20-Punkte-abgesehen von den vorderen und hinteren Kanten.

Wie man sehen kann, keines der Elemente die explizite Breite-Einschränkungen. Die ganze Sache stützt sich auf die führende und nachfolgende Leerzeichen Zwangsbedingungen zwischen den Elementen und der scroll-Ansicht. Das layout, in meinem Kopf würde etwas anmutig Arbeit auf hypothetische breiter-als-320 pt iPhones der Zukunft, ohne änderungen an den Einschränkungen. Es funktioniert auch nach dem drehen ins Querformat (es sieht vielleicht ein bisschen albern, aber es würde funktionieren).

Ich gehe durch die Punkte Schritt für Schritt, bezogen auf den screenshot, wo nötig.

1: Dies funktioniert, ist nichts außergewöhnliches hier.

2: Der führenden Einschränkungen der Etiketten sind alle einfach Gleich 20 pt standard-Leerzeichen. Der nachfolgende Einschränkungen sind Größer Als oder Gleich 20 pt standard, angeblich, um die es Ihnen ermöglichen, zu wachsen, um sein scrollView.frame.size.width-40 breit, aber nicht breiter.

3: Gleiche wie 2.

4 und 5: Hier, wo es interessant wird. Der web-Ansicht und die text-Blick sind alle aufgelistet, die als Unangebrachte Ansichten, mit IB sagen deren Rahmen werden verschiedene zur Laufzeit. Die orange gestrichelte Grenzen bezeichnet man die richtigen frames, die nur horizontal so weit wie das längste element mit einem Größer-Als-Oder-Gleich nachfolgende Einschränkung; hier ist es "Eine Schaltfläche Mit einem Langen Titel", dessen Rechte Kante ist, wo die umrandeten Kanten-Ende.


Errichtung dieser Satz von Ansichten und Ihre Einschränkungen, die ich erwartet Probleme zu haben. Ich wusste, es würde schwierig sein, haben UITextViews wachsen vertikal höher als das von ≥ 67 Höhe definiert hier, vielleicht ist nur möglich durch den code. Immer die Etiketten und Tasten zu arbeiten, wie oben spezifiziert, durch die IB allein schien ein wenig zweifelhaft, auch.

Was ich nicht erwarten war, die web-und text-Blick' berichtet, richtigen frame, die nur so breit ist wie die breiteste label oder button. Es scheint, dass mit dieser Einstellung, die scroll-view nicht tatsächlich 320 Punkte breit, sondern nur so breit wie nötig, um zu passen das längste element und den Abstand, und die web-und text-Ansichten erwartet werden, zu erfüllen. Da die scroll-view fest eingeschränkt auf alle Seiten auf der obersten Ebene anzuzeigen, die eingestellt ist, werden 320 Punkte breit, ich habe keine Ahnung, warum das so ist. So ETWAS muss natürlich definieren die anfängliche Breite des scroll-view, aber warum sind nicht die Einschränkungen, die ich gemacht habe aus dem scroll-Blick auf die top-level-Sicht tun?

Angesichts der obigen Spezifikationen für diese Reihe von Ansichten, was muss ich ändern, um es geschehen zu lassen?

Dieser Fall zeigt die Tatsache, dass ich wirklich nicht richtig zu verstehen "Auto-Layout" noch, und ich hoffe, dass die Antworten mich aufklären über viele entscheidende Aspekte.

InformationsquelleAutor JK Laiho | 2014-02-13
Schreibe einen Kommentar