水平 FlatList 前后的间距(React Native)
Spacing before and after a horizontal FlatList (React Native)
我正在尝试创建一个水平的 FlatList
,它周围有一些间距。我能够通过列表中的 paddingLeft
获得正确的开始间距,但是列表中的 paddingRight
似乎没有在它后面放置任何 space (如果我一直滚动到最后,最后一项被压在边框上)。
这里有一份小吃,您可以 运行 现场试用一下:https://snack.expo.io/@saadq/aW50cm
这是我的代码:
import * as React from 'react';
import { Text, View, FlatList, StyleSheet } from 'react-native';
const data = [{ key: 1 }, { key: 2 }, { key: 3 }, { key: 4 }];
class App extends React.Component {
render() {
return (
<View style={styles.container}>
<FlatList
style={styles.flatList}
horizontal
data={data}
renderItem={() => (
<View style={styles.box}>
<Text>Box</Text>
</View>
)}
/>
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
},
flatList: {
marginTop: 100,
paddingLeft: 15,
paddingRight: 15, // THIS DOESN'T SEEM TO BE WORKING
// marginRight: 15 I can't use marginRight because it cuts off the box with whitespace
},
box: {
display: 'flex',
justifyContent: 'center',
alignItems: 'center',
height: 50,
width: 100,
borderWidth: 1,
borderColor: 'black',
paddingHorizontal: 15,
marginRight: 15,
},
});
export default App;
使用 marginRight
而不是 paddingRight
似乎确实给出了预期的间距结果,但是它会导致一个不同的问题,即 whitespace 总是在那里并在滚动。如有任何帮助,我们将不胜感激!
您可以使用 "ListFooterComponent"。它是 Flatlist 的一个 prop,作为 Flatlist 的最后一个组件。因此,您可以将宽度为 15 的空视图传递给它,以获得正确的边距。试试这个:
<FlatList
style={styles.flatList}
horizontal
data={data}
renderItem={() => (
<View style={styles.box}>
<Text>Box</Text>
</View>
)}
ListFooterComponent={<View style={{width:15}}></View>}
重要的代码行是这样的:
ListFooterComponent={<View style={{width:15}}></View>
似乎我能够通过在 FlatList
上使用 contentContainerStyle
道具而不是直接传递 style
道具来修复它。
您可以使用 contentInsets 属性 调整 FlatList、SectionList、ScrollView 的 contentInsets。 https://facebook.github.io/react-native/docs/scrollview#contentinset
例如
<FlatList
data={...}
renderItem={...}
horizontal={true}
contentInset={{ right: 20, top: 0, left: 0, bottom: 0 }}
/>
contentContainerStyle={{paddingBottom:xxx}}
<FlatList
// extraData={this.props.x}
contentContainerStyle={{paddingBottom: 10, paddingTop: 8}}
data={contacts}
removeClippedSubviews={false}
keyExtractor={(item, index) => index.toString()}
// onRefresh={false}
renderItem={({item}) => (
<View
style={{
flex: 1,
flexDirection: 'row',
justifyContent: 'space-between',
// margin: 3,
marginVertical: 5,
marginHorizontal: 4,
// borderWidth: 1,
// borderColor: '#d6d7da',
borderRadius: 7,
// padding: 1,
// borderRightWidth: 1, borderRightColor: '#d6d7da'
}}>
<Text>HOLA</Text>
</View>
)}
/>
我用这个方法解决问题:
ItemSeparatorComponent={() => <View style={{ width: 35 }} />}
我正在尝试创建一个水平的 FlatList
,它周围有一些间距。我能够通过列表中的 paddingLeft
获得正确的开始间距,但是列表中的 paddingRight
似乎没有在它后面放置任何 space (如果我一直滚动到最后,最后一项被压在边框上)。
这里有一份小吃,您可以 运行 现场试用一下:https://snack.expo.io/@saadq/aW50cm
这是我的代码:
import * as React from 'react';
import { Text, View, FlatList, StyleSheet } from 'react-native';
const data = [{ key: 1 }, { key: 2 }, { key: 3 }, { key: 4 }];
class App extends React.Component {
render() {
return (
<View style={styles.container}>
<FlatList
style={styles.flatList}
horizontal
data={data}
renderItem={() => (
<View style={styles.box}>
<Text>Box</Text>
</View>
)}
/>
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
},
flatList: {
marginTop: 100,
paddingLeft: 15,
paddingRight: 15, // THIS DOESN'T SEEM TO BE WORKING
// marginRight: 15 I can't use marginRight because it cuts off the box with whitespace
},
box: {
display: 'flex',
justifyContent: 'center',
alignItems: 'center',
height: 50,
width: 100,
borderWidth: 1,
borderColor: 'black',
paddingHorizontal: 15,
marginRight: 15,
},
});
export default App;
使用 marginRight
而不是 paddingRight
似乎确实给出了预期的间距结果,但是它会导致一个不同的问题,即 whitespace 总是在那里并在滚动。如有任何帮助,我们将不胜感激!
您可以使用 "ListFooterComponent"。它是 Flatlist 的一个 prop,作为 Flatlist 的最后一个组件。因此,您可以将宽度为 15 的空视图传递给它,以获得正确的边距。试试这个:
<FlatList
style={styles.flatList}
horizontal
data={data}
renderItem={() => (
<View style={styles.box}>
<Text>Box</Text>
</View>
)}
ListFooterComponent={<View style={{width:15}}></View>}
重要的代码行是这样的:
ListFooterComponent={<View style={{width:15}}></View>
似乎我能够通过在 FlatList
上使用 contentContainerStyle
道具而不是直接传递 style
道具来修复它。
您可以使用 contentInsets 属性 调整 FlatList、SectionList、ScrollView 的 contentInsets。 https://facebook.github.io/react-native/docs/scrollview#contentinset
例如
<FlatList
data={...}
renderItem={...}
horizontal={true}
contentInset={{ right: 20, top: 0, left: 0, bottom: 0 }}
/>
contentContainerStyle={{paddingBottom:xxx}}
<FlatList
// extraData={this.props.x}
contentContainerStyle={{paddingBottom: 10, paddingTop: 8}}
data={contacts}
removeClippedSubviews={false}
keyExtractor={(item, index) => index.toString()}
// onRefresh={false}
renderItem={({item}) => (
<View
style={{
flex: 1,
flexDirection: 'row',
justifyContent: 'space-between',
// margin: 3,
marginVertical: 5,
marginHorizontal: 4,
// borderWidth: 1,
// borderColor: '#d6d7da',
borderRadius: 7,
// padding: 1,
// borderRightWidth: 1, borderRightColor: '#d6d7da'
}}>
<Text>HOLA</Text>
</View>
)}
/>
我用这个方法解决问题:
ItemSeparatorComponent={() => <View style={{ width: 35 }} />}