我正在尝试建立一个具有以下属性的项目的平面列表。
- 有
flex: 1
- 它没有指定的宽度(高度可以在图像的内容中设置)
- 是
maxWidth
设置 width
不能被强制到100%
,因为目的是让平面列表支持多列minWidth
不能设置,因为如果内容太大而不适合列数,它将防止内容收缩。
FlatList
是屏幕的顶层组件,所以它会在iOS中做折叠头。
- 它占据了整个宽度
- 有一些内边距
- 滚动条应该向右刷新(所以你不能在FlatList本身上执行
padding
)
所以我得到的是像
这样的东西const data = Array.from({length: 5}, (v,k) => ({v,k}));
function renderItem({item, index}) {
return (<View style={{
flex:1,
maxWidth: 100,
borderWidth: 1,
backgroundColor: 'red',
// alignSelf: "center" (also shrinks)
}}>
<Text>{item.k}</Text>
</View>)
}
return (<FlatList
style={StyleSheet.absoluteFill}
contentContainerStyle={{
padding: 16,
// alignSelf: center (shrinks content)
}}
renderItem={renderItem}
data={data}
/>)
我也想避免onLayout
,以防止太多的渲染器
https://snack.expo.dev/@trajano flatlistneedscentering
还有一个名为columnWrapperStyle
的道具可以满足我的需求。
<FlatList
columnWrapperStyle={{
justifyContent: 'center',
}}
contentContainerStyle={{
paddingVertical: 16,
}}
initialNumToRender={2}
renderItem={renderItem}
data={data}
numColumns={numColumns} //can be set to 3 to force shrinking
ItemSeparatorComponent={() => <View style={{ height: 16 }} />}
keyExtractor={(item) => item.k.toString()}
/>
);
请注意,NativeBase没有将其公开为实用工具道具。