Ich habe eine WML-Anwendung mit einem ScrollView und einem ListView innerhalb. Die Elemente aus der ListView haben eine variable Höhe.ListView in einer ScrollView: Wie Scroll-Position zu wissen (ist es unten?)
Ich muss wissen, wenn die Bildlaufleiste bewegt wird, in der Tat, wenn es unten ist und wenn es nicht ist. Mein Ziel ist es, Scroll am unteren Rand (positionViewAtEnd()) zu halten, wenn ich ein Element nur dann zur ListView hinzufüge, wenn die Rolle unten ist. Wenn nicht unten, wird positionViewAtEnd() nicht verwendet.
Ich habe versucht, mit Höhe, contentHeigh & contentY "spielen". Manchmal funktioniert es (wenn scroll ist unten: contentHeight == contentY + height), aber zu anderen Zeiten contentY Wert ändert sich in negative Werte, und mein Code schlägt fehl ...
Irgendwelche Hilfe?
Vielen Dank
Diego
Dank JP Nurmi,
Ich habe in mehreren Eigenschaftsänderungen mit 'atYEnd' versucht, zu erkennen, wenn Scroll unten ist oder nicht
Es scheint zu funktionieren, und dann verwende ich das in 'onCountChanged', um die Schriftrolle an der Unterseite
01 zu setzen (oder nicht)Das funktioniert, sobald die gesamte ListView-Höhe voller Nachrichten ist, aber NICHT in EINEM Fall: wenn die eingehende Nachricht die ListView-Höhe (das erste Mal, dass contentY NICHT '0' ist) ausfüllt.
Ich weiß nicht, ob es klar ist ...
ich meinen Code (einschließlich der Delegierten) zu testen vereinfacht, und es scheint nun wie folgt aus:
FocusScope {
clip: true
id: focusScopeView
width: parent.width; height: parent.height
ScrollView {
width: parent.width; height: parent.height
ListView {
id: listTexts
width: parent.width; height: parent.height
property bool bScrolled: false
model: textsModel
delegate: Text { text: "Contact:\t" + eventText }
onCountChanged: {
if (!bScrolled)
positionViewAtEnd();
}
onContentYChanged: {
bScrolled = !atYEnd;
if (atYEnd)
positionViewAtEnd()
}
onContentHeightChanged: {
if (!bScrolled)
positionViewAtEnd();
}
}
}
}
Danke und Grüße !
Diego
Danke, aber neue eingehende Nachrichten müssen an der Unterseite hinzugefügt ... – Diego
Ja, das ist, was 'verticalLayoutDirection: ListView.BottomToTop' tut, wenn Sie am Anfang des Modells einsetzen, zum Beispiel' listModel.insert (0, {text: "foo"}) '. – jpnurmi