iOS
UIScrollView mit StackView-Kind
Suche…
Eine komplexe StackView in Scrollview Example
Es folgt ein Beispiel dafür, was mit verschachtelten StackViews möglich ist, und vermittelt dem Benutzer den Eindruck eines kontinuierlichen Bildlaufs, bei dem komplexe Benutzeroberflächenelemente oder -ausrichtungen verwendet werden.
Mehrdeutiges Layout vermeiden
Eine häufige Frage zu StackViews innerhalb von Scrollviews stammt aus mehrdeutigen / heigh-Warnungen im Interface Builder. Wie diese Antwort erklärt hat, ist es notwendig:
- Fügen Sie in der UIScrollView eine UIView (die contentScrollView) hinzu.
- Setzen Sie in dieser contentScrollView den oberen, unteren, linken und rechten Rand auf 0
- Richten Sie das Zentrum auch horizontal und vertikal aus.
In verschachtelten StackViews zum Inhalt blättern
Das große Problem beim Scrollen besteht darin, den Versatz zu bestimmen, der erforderlich ist, um ein Textfeld in einer StackView darzustellen, das sich in der ScrollView befindet .
Wenn Sie versuchen, die Position von Textfield.frame.minY
kann dies 0 sein , da der minY-Frame nur den Abstand zwischen dem Element und der Oberseite der StackView berücksichtigt. Sie müssen also alle anderen übergeordneten Stackviews / Views betrachten.
Eine gute Lösung für dieses Problem ist:
1 - Implementieren Sie die ScrollView-Erweiterung
extension UIScrollView {
func scrollToShowView(view: UIView){
var offset = view.frame.minY
var superview = view.superview
while((superview != nil)){
offset += (superview?.frame.minY)!
superview = superview?.superview
}
offset -= 100 //optional margin added on offset
self.contentOffset = CGPoint.init(x: 0, y: offset)
}
}
Dies berücksichtigt alle übergeordneten Ansichten und summiert den erforderlichen Versatz für die Bildlaufansicht, um die erforderliche Ansicht auf dem Bildschirm darzustellen (z. B. ein Textfeld, das nicht hinter der Benutzertastatur bleiben kann).
Anwendungsbeispiel:
func textViewDidBeginEditing(_ textView: UITextView) {
self.contentScrollView.scrollToShowView(view: textView)
}