2016-07-06 21 views
0

Ich habe eine einfache Content-Seite, die ich zwei ListViews leben soll. Ich möchte, dass die ListViews übereinander gestapelt werden.Xamarin Forms - Zwei ListViews gestapelt

Wenn ich sie als Teil eines StackPannels hinzufüge, nimmt jede ListView die Hälfte der Ansicht vertikal ein. Allerdings möchte ich, dass der erste (oberste) ListView beim Scrollen den ganzen Weg erweitert und dann den zweiten ListView aufnimmt. Im Wesentlichen muss die Höhe der Ansicht also die Höhe der einzelnen ListViews sein.

Ich könnte dies über 1 ListView erreichen und nur Grouping, aber in diesem Fall möchte ich zwei separate ListViews, die vertikal vollständig erweitert werden.

Was ist der Trick, um dies zu erreichen? Sollte ich das ScrollView-Element verwenden?

Antwort

2

Haftungsausschluss: Die Verwendung eines ListView in einer ScrollView wird nicht empfohlen.

Antwort: Ja, verwenden Sie eine ScrollView, aber (lesen Sie weiter unten, bevor Sie nach unten gehen) müssen Sie die Auswirkungen Ihrer Scroll (zumindest auf iOS) bewältigen.

Die Jungs von Xamarin tat dies in der Evolve 16 app (Quelle: https://github.com/xamarinhq/app-evolve)

Grundsätzlich (aus meinem Verständnis), müssen Sie diese Schritte folgen:

  1. NonScrollableListView. Auf Android ist es das gleiche wie ein regulärer Listview. Bei iOS wird der Bildlauf der ListView auf "false" gesetzt (damit wird die ScrollView nicht beeinträchtigt).
  2. AlwaysScrollView. Auf Android-Geräten ist es nur eine normale ScrollView. In iOS wird AlwaysBounceVertical auf true festgelegt.

Ich bin mir nicht sicher, ob ich klar genug bin. Gib mir Bescheid. :)

[EDIT ~ Wichtiger Hinweis!] Nur um es zu verdeutlichen: Wenn Sie eine ListView in einer ScrollView verwenden, lädt ListView nach dem Laden der Seite die gesamte Collection und erstellt eine ViewCell für jedes Objekt in Ihrer Sammlung. Das bedeutet: Wenn Sie eine Collection mit 40 Elementen haben, erstellt das ListView 40 ViewCell-Instanzen und die CachingStrategy spielt keine Rolle. Der Performance-Hit ist am deutlichsten bei Andriod. Wenn Sie also die Anzahl der Elemente in Ihrer Sammlung nicht kontrollieren, beachten Sie, dass dies die Leistung beeinträchtigen könnte.

+0

Ein Problem sehe ich mit diesem Ansatz auf iOS. Wenn die ListView-Höhe länger als die Höhe des Geräts ist, werden verbleibende Datensätze abgeschnitten. Mein Gedanke ist, dass ich die Höhe des ListView programmatisch basierend auf der Anzahl der Datensätze festlegen muss? Irgendwelche Gedanken? Ich schließe VerticalOptions = "FillAndExpand" für alle Elemente ein (stackpannel, listview) – aherrick

+1

Nevermind! Überprüfen Sie Zeile 34 so, als ob sie programmatisch die Höhe anpassen: https://github.com/xamarinhq/app-evolve/blob/1c08946a17c2c5faabdced7c032f3fa4bdaccd1a/src/XamarinEvolve.Clients.UI/Pages/Home/FeedPage.xaml.cs – aherrick