Berechnung contentSize für UIScrollView, wenn Auto-Layout
Hier ist eine kurze Frage über etwas, das funktioniert, aber es könnte geschrieben werden viel besser. Ich habe eine UIScrollView
und eine Liste der Objekte gelegt innen, eine unter der anderen. Ist alles erledigt, während viewDidLoad()
und die Platzierung der Objekte verwendet Auto Layout
. Hier ist, was ich tun, um die contentSize
Höhe der UIScrollView
zu seinem entsprechenden Wert.
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
globalView.contentSize = CGSize(width: globalView.frame.width,
height: globalView.frame.height * 1.59)
}
Es funktioniert, aber der willkürliche Wert 1.59 offensichtlich beschlossen, mich zu versuchen, ein paar mögliche Werte. Was ist der richtige Weg, um zu berechnen, contentSize in so einem Fall? Ich Tue alles programmgesteuert.
Suche im Netz hat nicht mich führen auf eine einfache und klare Antwort, also auch wenn es vielleicht ein etwas doppelte Frage, die ich beschlossen zu formulieren, die es.
- Finden Sie viele Antworten zum gleichen Thema über die Einstellung, dass die Einschränkung der UIScrollView. Wenn Sie die Einschränkungen richtig ist, zu der alle Komponenten, die sich in UIScrollView dann würden Sie nicht brauchen, um die Konstante Größe programmatisch. Finden Sie unter diesem link erklärt, der gleiche - stackoverflow.com/questions/35624873/...
- Stimmt, aber die meisten (alle) von Ihnen nehme an, Sie sind mit storyboard 🙂
- Wenn Sie Unteransichten hinzufügen von code, können Sie wahrscheinlich nur gehen, um die Größe der Inspektor und wählen Sie die Zweideutigkeit->Nie Überprüfen Sie an der Unterseite.
- Pela : Das war eine Weile her, aber trotzdem sehen meine bevorzugte Lösung, wenn Sie interessiert sind. Suchen AutoLayScroll in einer der Antworten unten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Angabe von Inhalt, Größe programmatisch nicht gut Weg. Die Lösung, die unter
Arbeit mit autolayout, nicht brauchen, um set-Inhalt Größe überhaupt. Es wird berechnet als pro
wie viele UI-Felder Hinzugefügt, um anzuzeigen.
Schritt 1 :
Hinzufügen Scrollview anzeigen in storyboard und fügen Sie leading, trailing, oben und unten-Einschränkungen
(Alle Werte sind null).
Schritt 2 :
Nicht direkt hinzufügen Aussicht, die Sie brauchen, direkt auf scrollview, fügen Sie Zunächst eine Ansicht
zu scrollview (die unsere Inhalte anzeigen, die für alle UI-Elemente).
Fügen Sie unter Einschränkungen zu dieser Ansicht.
1) die vordere, hintere, Obere und untere Randbedingungen
(Alle Werte sind null).
2) Hinzufügen, gleiche Höhe, gleiche Breite auf der Hauptansicht (D. H. enthält scrollview).
Für gleiche Höhe legen Sie die Priorität auf niedrig. (Das ist der wichtige Schritt für die Einstellung der Größe des Inhalts).
3) die Höhe dieser Inhalte anzeigen werden nach der Anzahl der Ansichten die Ansicht Hinzugefügt.
lassen Sie sagen, wenn Sie Hinzugefügt letzten Ansicht ist ein label und seine Y-position 420 und Höhe
20 dann Ihre Inhalte anzuzeigen 440.
Schritt 3 : Fügen Sie Einschränkungen, um alle Ansichten, die Sie innerhalb content anzeigen wie pro Ihre Anforderung.
Referenz :
Ich hoffe, dies wird Ihnen definitiv helfen.
Aber ich habe endlich um dieses Problem zu lösen und machen Dinge funktionieren.
Ich bemerkte, dass alle, die ich finden konnte im Netz, die als Verwandte Antworten gerichtet war storyboard-Nutzer. Aber nichts zu tun, es programmatisch, ich könnte meine Hände auf.
Also habe ich beschlossen, eine sehr einfache demo-app, um zu zeigen, wie dies erreicht werden kann. Ich hoffe, es wird nützlich sein, um jemanden an einem gewissen Punkt.
Hier ist die Adresse, um es auf GitHub:
https://github.com/zaxonus/AutoLayScroll
UIStackView
angeheftet in alle Richtungen, um dieUIScrollView
statt.Ich auch, dass Einschränkungen programmgesteuert dynamisch ändern UIScrollView ist contentSize . Ich habe es ziemlich genau Shrikant die Anleitung aber für Schritt 2.1, ich centerX des scrollViews.centerX eher als die vorderen und hinteren Ränder (Keine Ahnung, warum die früheren Werke, während die letzteren nicht). Dann als letzten Schritt, nach dem hinzufügen der letzten Untersicht, ich habe die folgenden:
Hoffe, das hilft jemand in der Zukunft.