2016-07-06 4 views
0

У меня есть простая страница содержания, в которой я хочу, чтобы два ListViews жили. Я хочу, чтобы ListViews складывались друг на друга.Xamarin Forms - Два ListViews Stacked

Если я добавлю их как часть StackPannel, каждый ListView занимает половину окна по вертикали. Тем не менее, я хочу, чтобы первый (верхний) ListView расширялся во время прокрутки, затем выбирал второй ListView. Таким образом, высота представления должна быть высотой каждого списка в сочетании.

Я мог бы выполнить это через 1 ListView и просто выполнить группировку, но в этом случае я хочу, чтобы два отдельных ListViews были полностью расширены по вертикали.

Какая уловка для этого? Должен ли я использовать элемент ScrollView?

ответ

2

Отказ от ответственности. Использование ListView внутри ScrollView не рекомендуется.

Ответ: Да, используйте ScrollView, но (продолжайте читать ниже перед downvoting), вы должны обработать влияние вашего Scroll (по крайней мере, на iOS).

Ребята из Xamarin сделал это в Evolve 16 приложения (источник: https://github.com/xamarinhq/app-evolve)

В основном (из моего понимания), вам нужно будет следовать этим шагам:

  1. NonScrollableListView. На Android это похоже на список Listview. В iOS он устанавливает прокрутку ListView в значение false (поэтому он не будет мешать ScrollView).
  2. AlwaysScrollView. Опять же, на Android, это просто обычный ScrollView. На iOS он устанавливает AlwaysBounceVertical значение true.

Я не уверен, если я достаточно ясен. Дай мне знать. :)

[РЕДАКТИРОВАТЬ ~ Важное замечание!] Просто для того, чтобы было ясно: использование ListView внутри ScrollView сделает ListView загрузкой всей коллекции после загрузки страницы, создав ViewCell для EACH ITEM в вашей коллекции. Это означает, что: если у вас есть коллекция из 40 элементов, ListView создаст 40 экземпляров ViewCell, а CachingStrategy не будет иметь значения. Эффективность удара наиболее заметна на Andriod. Поэтому, если вы не контролируете количество предметов в своей коллекции, имейте в виду, что это может сильно повредить производительность.

+0

Одна проблема, которую я вижу с этим подходом на iOS. Если высота ListView больше, чем высота устройства, она отключает оставшиеся записи. Я думал, что мне придется программно установить высоту ListView на основе количества записей? Есть предположения? Я включаю VerticalOptions = «FillAndExpand» для всех элементов (stackpannel, listview) – aherrick

+1

Nevermind! Контрольная строка 34 выглядит так, как будто они программно регулируют высоту: https://github.com/xamarinhq/app-evolve/blob/1c08946a17c2c5faabdced7c032f3fa4bdaccd1a/src/XamarinEvolve.Clients.UI/Pages/Home/FeedPage.xaml.cs – aherrick