我想使用flatlist在react native中添加一些间距,但目前看起来比应该的要困难。
原来react native不支持gap
属性,这使得这个问题变得非常复杂。
我解决了水平间距,通过使我的项目49.5%
宽,这意味着我有1%
空间水平,现在我如何做同样的垂直间距?
最重要的是,我如何确保横向和纵向“差距”相等。
const renderItem = ({ item }) => (
<Pressable onPress={() => alert(item.name)} style={{
aspectRatio: 1,
width: "49.5%",
position: "relative",
}}>
<Image
style={{
width: "100%",
height: "100%"
}}
source={{
uri: item.url,
}}
/>
<View
style={{
position: "absolute",
zIndex: 3,
bottom: 0,
paddingHorizontal: 2,
paddingVertical: 8,
flexDirection: "row",
// justifyContent: "center",
alignItems: "center",
}}
>
<Text style={{ color: "white", fontSize: 16 }}>{item.name}</Text>
</View>
</Pressable>
);
export default function App() {
return <FlatList
numColumns={2}
data={people}
renderItem={renderItem}
columnWrapperStyle={{
justifyContent: "space-between"
}}
/>
}
3条答案
按热度按时间acruukt91#
您可以使用
FlatList
组件的ItemSeparatorComponent
属性来创建垂直间距。此属性是在每个FlatList
项之间呈现的组件,但不是在顶部、底部、右侧或左侧呈现的组件。您可以在文档中阅读有关此属性的更多信息。将
FlatList
更改为:为了使水平空间与垂直空间大小相同,可以使用
padding
将一列从另一列移开:paddingRight
是垂直空间大小的一半。paddingLeft
而不是paddingRight
。下面是代码:
一些要点:
View
父组件,因为如果Pressable具有padding
属性,则垂直间隙也将是可按的。width: '50%'
,因为这会使图像占用屏幕宽度的一半。padding
而不是margin
,因为width
仍然是50%
,所以margin会将元素推到屏幕的右边缘之外。如果您使用更大的值,如40
而不是10
,margin
而不是padding
,您会发现问题。This是视觉结果。
P.S.:我在我的机器上运行了你的应用程序,并使用了Unsplash上的一些URL图像,它工作正常:垂直间隙由ItemSeparatorComponent创建。
我对代码做了一些修改,现在水平和垂直的间隙大小相等。This是结果。另外,我修改了我的答案。
qyyhg6bp2#
ItemSeparatorComponent
负责between rows
的空间,但不负责列之间的空间,因为我们有一个两列的FlatList
,所以我们可以创建与ItemSeparatorComponent
相同的两列之间的空间,方法是将其作为marginRight
添加到所有具有odd index
的元素中。关键部分是渲染函数中每个项目的父视图的
marginRight: index % 2 !== 0 ? 0 : 10
。cx6n0qe33#
对我来说,简单的解决方案是在每个项目周围添加边距,在容器周围添加负边距。