我正在尝试实现一个有两行的水平滚动列表,使用FlatList,垂直滚动列表需要设置numColumns
,但是没有与使用水平滚动列表的行等效的设置。
我成功地使它正确地呈现,它工作得完美无缺。但是,一个警告被抛出,说设置flexWrap
在VirtualizedList
或FlatList
中不受支持,并使用numColumns。我不能使用numColumns,因为这不适用于水平列表。
<FlatList
horizontal={true}
contentContainerStyle={{
flexDirection: 'column',
flexWrap: 'wrap'
}}
{...otherProps}
/>
我找到了添加此警告的提交,但找不到其背后的原因。似乎没有办法在不抛出警告的情况下使其工作,至少没有完全抛弃FlatList。对于有行的水平列表有更合适的解决方案吗?
参考资料:
9条答案
按热度按时间pkln4tw61#
请不要使用
horizontal={true}
。在这种情况下,您应该使用等于data长度/ 2的numColumns
,并添加一个<ScrollView>
标记。强制列数为总数的一半将强制列表换到下一行。更新1:编辑
listData.length / 2
-〉Math.ceil(listData.length / 2)
以下亚历克斯昂评论。qzwqbdag2#
第一个答案,我就是这么做的:
vq8itlhq3#
我用简单的逻辑
输出:Output
yhived7q4#
我有同样的问题与项目列表(几百),这是不是那么长,我设法克服了它,通过去我的列表Map到多个视图,每个有2个项目一个接一个(列使用flex)
如果列表不是太长,也可以使用
ScrollView
,它支持flexWrap
lymnna715#
通过一些预处理工作将每个
ROWS_COUNT
切片为一列结果:
klsxnrf16#
tuanngocptn的答案是可行的。然而,两行水平列表也可以在水平拖动的同时垂直拖动,这并不是一个很好的UX。
将
directionalLockEnabled={true}
和alwaysBounceVertical={false}
添加到ScrollView将解决此问题xesrikrc7#
我发现的最简单的方法(如果您想要x列,请更改numColumns以将数据长度除以x):
moiiocjp8#
我使用
numRows
属性为FlatList创建了一个 Package 器。该解决方案没有在ScrollView中使用FlatList,因为这可能会使FlatList的一些性能优化无效。相反,它将数据分块并添加也可以设置样式的列组件。
https://www.npmjs.com/package/@idiosync/horizontal-flatlist
byqmnocz9#
让我们检查一下:https://snack.expo.dev/@legiaquan/flatlist-extra-expo?platform=android附加平面列表:https://www.npmjs.com/package/flatlist-extra