2017-10-31 2 views
2

Ich habe einen Bildschirm, auf dem Kommentarliste mit Stack-Layout und Scrollview angezeigt wird. Der Nutzer kann einen weiteren Kommentar hinzufügen und auf "Senden" klicken. Am Ende dieser Bildansicht für Xamarin Forms - Android- und iOS-App werden weitere Kommentare hinzugefügt. Die Anforderung besteht darin, diese Liste nach oben zu rollen, um das letzte Kommentarelement anzuzeigen. Dafür habe ich die untere Zeile des Codes verwendet, aber es wird nicht bis zum letzten Element, sondern vor dem zweitletzten Element hochgescrollt. Ich habe es in IOS und Android beide beobachtet.Xamarin Formulare - ScrollView - ScrollToAsync nach unten funktioniert nicht wie erwartet

await scrollView.ScrollToAsync(stkMain, ScrollToPosition.End, true); 

Unter Bild würde mehr Idee darüber geben.

enter image description here

Wie in Abbildung gezeigt, 3 Stack-Layout ist auf dem Bildschirm nicht sichtbar, obwohl ich über Code verwendet habe, bis Ende zu blättern. Ich muß Scroll-Ansicht nach oben zu Stack-Layout 3.

Erwartetes Verhalten zu sehen - Scroll-Ansicht soll bis zum vollständigen letzten Elemente bewegen wie auf dem Bildschirm angezeigt. Bitte schlagen Sie vor Wenn ich es nicht richtig mache.

Eine Sache, die ich vergessen zu erwähnen, ist, wenn ich Punkt an der Linie erstellen haben scrolToAsync Methode im Debug-Modus mit. Haltepunkt trifft diese Linie und wenn ich F5 drücke, würde das letzte Element sichtbar werden. Ich bin überrascht, es zu sehen, aber es passiert

+0

Haben Sie versucht, das letzte Kind von 'stkMain' zu bekommen und zu diesem zu scrollen? –

+0

Eine Sache, die ich vergessen zu erwähnen, ist, wenn ich einen Punkt in Zeile mit ScrollToAsync-Methode im Debug-Modus habe. Haltepunkt trifft diese Linie und wenn ich F5 drücke, würde das letzte Element sichtbar werden. Ich bin überrascht, es zu sehen, aber es passiert. –

+1

Es ist nicht so überraschend. Denken Sie daran, dass die Rendering-Methoden oft asynchron sind und der Code dahinter ausgeführt werden kann, bevor die Elemente auf dem gerenderten Bildschirm verfügbar sind. Ich weiß, dass es nicht die beste Lösung ist, aber manchmal habe ich eine Verzögerung von 300ms erzwungen, bevor ich irgendeine visuelle Interaktion ausführen konnte. (Sorry für jede Art von schlechtem Englisch, ich lerne noch = D) –

Antwort

1

Fügen Sie einige Verzögerung nach dem Hinzufügen neuer Kommentarelemente Operation abgeschlossen ist und dann versuchen, bis zum letzten Kind Ihrer stkMain, stattdessen.

Etwas wie folgt aus:

var lastChild = stkMain.Children.LastOrDefault(); 
if(lastChild != null) 
    scrollView.ScrollToAsync(lastChild, ScrollToPosition.MakeVisible, true); 
+0

Lassen Sie mich versuchen und auf Sie zurückkommen. –

1

Wenn Sie gerade nach unten scrollen wollen versuchen

scrollView.ScrollToAsync (stkMain.Height, true);

+0

Ich habe das aber nicht perfekt funktioniert. :( –

+0

Ziehen Sie etwas von stkMain.Height vielleicht .. –

Verwandte Themen