UIScrollView mit iOS-Auto-Layout-Einschränkungen: Falsche Größe für Unteransichten

7

Ich versuche eine Sicht im Code zu generieren. Hier ist die Hierarchie meines View-Objekts

  • UIScrollView
    • UIView
      • UIButton

Die ScrollView sollte die gleiche Größe wie das Fenster haben. Der Knopf sollte so groß wie möglich sein. Ich benutze iOS Auto-Layout, so dass die Constraint-Strings für alle meine Objekte wie folgt aussehen

%Vor%

Ich habe auch translatesAutoresizingMaskIntoConstraints auf NO für jedes Objekt gesetzt.

Das Problem ist, dass die Schaltfläche nur die Standardgröße der Schaltfläche erhält. Das übergeordnete Ansichtsobjekt (UIView) erhält nur die Größe, die seine Teilansichten benötigen.

rot: UIScrollView / gelb: UIView

Wie kann ich diese Ansichten so groß wie scrollView machen?

Wenn ich eine UIView anstelle von UIScrollView verwende, funktioniert alles super ...

Hier ist ein Code:

%Vor%

UPDATE: Ich weiß wirklich nicht, warum das passiert. Wenn Sie die Ansicht in IB einrichten, die Ausgänge verbinden und die Ansicht in Code instanziieren, verhält sich die Bildlaufansicht wie eine normale Ansicht (die vertikal springt). Seine contentSize wird nicht korrekt berechnet. Weitere hier . Aber wie mache ich das richtig?

    
Chrizzor 08.05.2013, 13:18
quelle

1 Antwort

23

Ein paar Beobachtungen:

  1. Einschränkungen für Unteransichten in Bildlaufansichten funktionieren nicht wie Einschränkungen in anderen Ansichten. Sie werden verwendet, um contentSize der Bildlaufansicht festzulegen. (Siehe TN2154 .) Auf diese Weise werfen Sie eine Menge Dinge auf eine Bildlaufansicht , setze die Beschränkungen für das Zeug darin und das contentSize wird für dich berechnet. Es ist ein sehr cooles Feature, aber es steht im Gegensatz zu dem, was Sie hier versuchen.

  2. Schlimmer noch: Die Schaltflächen werden, sofern Sie nicht explizit eine Einschränkung für die Breite und Höhe einer Schaltfläche festlegen, entsprechend ihrem Inhalt skaliert.

Der Nettoeffekt dieser beiden Beobachtungen ist, dass Ihre bestehenden Einschränkungen sagen: "(a) setze meinen Container auf die Größe meiner Schaltfläche; (b) lasse meine Schaltfläche dynamisch an die Größe des Textes anpassen und (c ) Setzen Sie den contentSize der Bildlaufansicht entsprechend der Größe meines Containers (was der Größe der Schaltfläche entspricht). "

Ich bin unklar, was das Geschäftsproblem ist. Aber hier sind einige Einschränkungen, die das erreichen, was ich Ihrer technischen Frage nachgesehen habe:

%Vor%

Ehrlich gesagt, verstehe ich die geschäftliche Absicht Ihrer Benutzeroberfläche nicht, da sich dies wie eine Verzerrung des automatischen Layouts anfühlt, um eine sehr einfache Benutzeroberfläche zu erhalten. Ich weiß nicht, warum Sie eine Bildlaufansicht haben, wenn Sie Inhalte in Bildschirmgröße haben (es sei denn, Sie blättern durch die Schaltflächen). Ich weiß nicht, warum Sie eine Inhaltsansicht mit einem einzelnen Element haben. Ich verstehe nicht, warum du eine Vollbild-Schaltfläche verwendest (ich würde einfach eine Tippgeste auf die Grundansicht setzen und es dann zu einem Tag machen).

Ich nehme an, Sie haben gute Gründe für all das, aber es könnte sinnvoll sein, zu sichern, zu fragen, was Ihre gewünschte Benutzererfahrung ist, und das Problem dann frisch anzugehen, um zu sehen, ob es einen effizienteren Weg gibt der gewünschte Effekt.

    
Rob 09.05.2013, 21:14
quelle