Berechnung von contentSize für UIScrollView bei Verwendung von Auto Layout

8

Hier ist eine kurze Frage zu etwas, das funktioniert, aber viel besser geschrieben werden könnte. Ich habe eine UIScrollView und eine Liste von Objekten, die untereinander angeordnet sind. Alles geschieht während viewDidLoad() und die Platzierung der Objekte verwendet Auto Layout . Hier ist, was ich tue, um die contentSize Höhe von UIScrollView auf den entsprechenden Wert zu setzen.

%Vor%

Es funktioniert, aber der willkürliche Wert 1.59 wurde offensichtlich von mir entschieden, indem ich ein paar mögliche Werte ausprobiere. Was ist der richtige Weg, um die contentSize in einem solchen Fall zu berechnen? Ich mache alles programmatisch. Die Suche im Netz führte mich nicht zu einer einfachen und klaren Antwort. Obwohl es eine etwas doppelte Frage sein könnte, habe ich mich entschieden, sie neu zu formulieren.

    
Michel 15.08.2016, 03:25
quelle

3 Antworten

47

Die programmatische Angabe der Inhaltsgröße ist nicht gut. Die folgende Lösung, die wird Arbeiten Sie mit Autolayout, müssen Sie nicht die Größe des Inhalts überhaupt einstellen. Es wird wie berechnet Wie viele UI-Felder zur Ansicht hinzugefügt wurden.

Schritt 1:

Fügen Sie Scrollview hinzu, um es im Storyboard anzuzeigen und führende, nachfolgende, obere und untere Beschränkungen hinzuzufügen         (Alle Werte sind Null).

Schritt 2:

Fügen Sie nicht direkt Ansichten hinzu, die Sie direkt in scrollview benötigen. Fügen Sie zuerst eine Ansicht hinzu   scrollview (das ist unsere Inhaltsansicht für alle UI-Elemente).   Fügen Sie Einschränkungen für diese Ansicht hinzu.

1) Leading, Trailing, Top und Bottom Constraints     (Alle Werte sind Null).

2) Gleiche Höhe, gleiche Breite zur Hauptansicht hinzufügen (d. h. welche scrollview enthält).      Bei gleicher Höhe setzen Sie die Priorität auf niedrig. (Dies ist der wichtige Schritt zum Festlegen der Inhaltsgröße) .

3) Die Höhe dieser Inhaltsansicht richtet sich nach der Anzahl der Ansichten, die der Ansicht hinzugefügt wurden.        sagen wir, wenn Sie die letzte Ansicht hinzugefügt haben, ist ein Label und seine Y-Position ist 420 und Höhe        ist 20, dann wird Ihre Inhaltsansicht 440 sein.

Schritt 3 : Fügen Sie Einschränkungen zu allen Ansichten hinzu, die Sie in der Inhaltsansicht gemäß Ihren Anforderungen hinzugefügt haben.

Als Referenz:

Ich hoffe, das wird dir definitiv helfen.

    
Shrikant K 16.08.2016, 07:32
quelle
1

Obwohl ich endlich dieses Problem lösen und die Dinge zum Laufen bringen konnte. Ich bemerkte, dass alles, was ich im Internet finden konnte, als verwandte Antworten an Storyboard-Nutzer gerichtet war. Aber nichts, um es programmatisch zu machen, das ich in die Hände bekommen könnte.

Also habe ich beschlossen, eine extrem einfache Demo-App zu erstellen, um zu zeigen, wie das erreicht werden kann. Ich hoffe, dass es irgendwann für jemanden nützlich sein wird.

Hier ist die Adresse, um es auf GitHub zu bekommen: Ссылка

    
Michel 24.08.2016 07:41
quelle
1

Ich habe auch programmgesteuert Einschränkungen verwendet, um die contentSize von UIScrollView dynamisch zu ändern. Ich habe die Anweisungen von Shrikant ziemlich genau befolgt, aber für Schritt 2.1 habe ich centerX auf scrollViews.centerX gesetzt, anstatt die vorderen und hinteren Ränder zu setzen (Keine Ahnung, warum die erste funktioniert, während die zweite nicht funktioniert). Als letzten Schritt, nach dem Hinzufügen der letzten Unteransicht, habe ich Folgendes getan:

%Vor%

Hoffe das hilft jemandem in der Zukunft.

    
temlocke 21.03.2018 20:24
quelle

Tags und Links