2015-03-26 12 views
10

Ich habe ein Layout wie folgt (mit Autolayout, iPad):Größe UIView in UIScrollView mit AutoLayout für Scrollen?

Xcode screenshot

Die UIScrollView hat oben, unten, führt, den Raum zum Superview als 0. Der Nachgestellte UIView auch alle vier ähnlichen Einschränkungen hat. Die zweite UILabel hat ihre Höhe programmgesteuert auf 0 gesetzt (da mehr als ein Bildschirm voller Text hier angezeigt wird). Diese Vier-Pin-Beschränkungen wurden auch von der UIView bis UIScrollView aufgestellt.

Wenn die XIB geladen ist, zeigt diese UILabel lange Textzeilen korrekt. Scrollen funktioniert jedoch nicht. Dies ist ein Screenshot von der laufenden Anwendung auf einem IPAD:

enter image description here

Der gelbe Hintergrund für die äußerste Ansicht und die grauen eines für die UIView eingestellt ist. Wenn Sie am Ende des Screenshots genau sehen, scheint der Text UILabel über die UIView hinaus zu fließen.

Ich vermute, dass, weil die UIView nicht „einfangen“ die Größe der es Subviews ist, kann die UIScrollView nicht berechnen es ist content zu (es gibt keinen Grund für die Scrollbar, wenn ihr Inhalt nur zur Ansicht gleich einem Bildschirm zu arbeiten). Warum passiert das, obwohl die UILabel eindeutig eine Unteransicht der UIView ist? Wenn mein Verdacht richtig ist, wie setze ich die UIView Höhe gleich der tatsächlichen Inhaltsgröße, so dass mein UILabel richtig darin "enthalten" ist?

(Einstellung der UIView Höhe, Breite statisch ist keine Option).

Hinweis: Getestet wurde die XIB ohne UIView und nur eine einzige UILabel (mit langem Text) innerhalb einer UIScrollView. Jetzt funktioniert das Scrollen (da, wie ich annehme, die Bildlaufansicht ihre Inhaltsgröße berechnen kann).

NB2: Ich habe auch versucht, die Antworten in this SO question und this post aber meine UIView einfach nicht über die Abmessungen des Bildschirms zu erweitern. (Ich interessiere mich nur für horizontale Scrolling)

Antwort

22

AutoLayout Probleme sind sehr schwer mit Text zu erklären. Ich hatte das gleiche Problem. Ich habe die Lösung in diesem Video gefunden. hoffe das wird dir auch helfen.

https://www.youtube.com/watch?v=UnQsFlMGDsI

Dieses Video zeigt, wie ein UIScrollView zu schaffen, die einige Blick auf den oberen Rand des Bildschirms und Blick auf den unteren Rand des Bildschirms in Automatische Anordnung hat. UIScrollView Inhalt Größe wird automatisch auf die Größe des Bildschirms oder auf die Größe des Inhalts in der Weise, dass auf kleineren Geräten Scrollen ist aktiv und auf größeren Geräten Scrollen ist nicht aktiv, weil es nicht benötigt wird angepasst. UIButton unter UITextFields bleibt immer am unteren Rand des Bildschirms und alles funktioniert auf allen iPhone-Auflösungen (iPhone 4/5/6/6 Plus).

+6

Das war unglaublich toll! Der Trick bestand darin, eine andere "UIView" ** außerhalb des "UIScrollView" zu haben und dann "Gleiche Höhen und Breiten" von der * inneren * 'UIView' auf die ** äußere ** 'UIView' zu beschränken. Vielen Dank! –

+0

Ihre Begrüßung. Und zögern Sie nicht, um weitere Hilfe zu bitten ... –

+2

Mein Tag gerettet! ..und für alle, die daran interessiert sind, setze ich "Gleiche Breite" und "Gleiche Höhe" von der inneren UIView zum scrollView selbst. –

Verwandte Themen