Xamarin Forms - два ListViews сложены
У меня есть простая страница контента, которую я хочу, чтобы два ListViews жили. Я хочу, чтобы ListViews накладывались друг на друга.
Если я добавлю их как часть StackPannel, каждый ListView занимает половину View по вертикали. Однако я хочу, чтобы первый (верхний) ListView полностью расширялся при прокрутке, а затем захватывал второй ListView. Таким образом, высота представления должна быть высотой каждого ListView вместе взятого.
Я мог бы сделать это через 1 ListView и просто сделать группировку, но в этом случае я хочу два отдельных ListViews, которые полностью развернуты по вертикали.
Какой трюк для этого? Должен ли я использовать элемент ScrollView?
1 ответ
Отказ от ответственности: использование ListView внутри ScrollView не рекомендуется.
Ответ: Да, используйте ScrollView, но (продолжайте читать ниже, прежде чем понижать голосование), вы должны справиться с воздействием вашего Scroll (по крайней мере, на iOS).
Ребята из Xamarin сделали это в приложении Evolve 16 (источник: https://github.com/xamarinhq/app-evolve).
В основном (насколько я понимаю), вам нужно будет выполнить следующие шаги:
- NonScrollableListView. На Android это так же, как и в регуляторе Listview. На iOS это устанавливает прокрутку ListView в ложь (таким образом, это не будет мешать ScrollView).
- AlwaysScrollView. Опять же, на Android это просто обычный ScrollView. В iOS для AlwaysBounceVertical установлено значение true.
Я не уверен, если я достаточно ясно. Дай мне знать.:)
[РЕДАКТИРОВАТЬ ~ Важное замечание!] Просто чтобы прояснить: использование ListView внутри ScrollView заставит ListView загрузить всю коллекцию после загрузки страницы, создав ViewCell для КАЖДОГО ИЗДЕЛИЯ в вашей коллекции. Это означает, что: если у вас есть Коллекция с 40 элементами, ListView создаст 40 экземпляров ViewCell, и CachingStrategy не будет иметь значения. Хит производительности наиболее заметен на Andriod. Так что, если вы не контролируете количество элементов в вашей коллекции, имейте в виду, что это может сильно повредить производительности.