FlatList不滚动

mat*_*ens 13 javascript css reactjs react-native react-native-android

我创建了一个屏幕,我显示一个包含FlatList的组件.出于某种原因,我无法滚动列表.谁能发现我的错误并指出我正确的方向?

我的屏幕文件中的渲染功能和样式:

render() {
return (
  <View style={styles.container}>
    <SearchBar />
    <ActivityList style={styles.list} data={this.state.data} />
  </View>
);
}
}

const styles = StyleSheet.create({
 container: {
  flex: 1,
  overflow: 'hidden',
  backgroundColor: '#fff',
  alignItems: 'center',
  justifyContent: 'flex-start',
 },
 list: {
  flex: 1,
  overflow: 'hidden',
 },
});
Run Code Online (Sandbox Code Playgroud)

从我的listitem组件渲染函数和样式:

export default class CardItem extends React.PureComponent {
render() {
return (
  <View style={styles.cardview}>
    <View style={styles.imagecontainer}>
      <Image
        resizeMode="cover"
        style={styles.cardimage}
        source={{
          uri: this.props.image,
        }}
      />
    </View>
    <View style={styles.cardinfo}>
      <Text style={styles.cardtitle}>{this.props.title}</Text>
      <View style={styles.cardtext}>
        <Text style={styles.textdate}>{this.props.date}</Text>
        <Text style={styles.texthour}>{this.props.hour}</Text>
      </View>
    </View>
  </View>
);
}
}

const styles = StyleSheet.create({
 cardview: {
  flex: 1,
  justifyContent: 'flex-start',
  backgroundColor: 'white',
  elevation: 3,
  maxHeight: 200,
  width: Dimensions.get('window').width - 20,
  margin: 1,
  marginTop: 10,
  borderRadius: 4,
},
imagecontainer: {
 flex: 7,
 height: 140,
 borderRadius: 4,
},
cardimage: {
 flex: 1,
 opacity: 0.8,
 height: 140,
 borderTopLeftRadius: 4,
 borderTopRightRadius: 4,
},
cardinfo: {
 flex: 2,
 flexDirection: 'row',
 justifyContent: 'space-between',
 alignItems: 'center',
 padding: 10,
},
cardtitle: {
 flex: 1,
 fontSize: 16,
 fontWeight: 'bold',
},
cardtext: {
 flex: 1,
 justifyContent: 'center',
 alignItems: 'flex-end',
},
textdate: {
 color: '#5e5e71',
},
texthour: {
 color: '#5e5e71',
},
});
Run Code Online (Sandbox Code Playgroud)

从我的列表组件中渲染函数和样式:

export default class ActivityList extends React.Component {
_renderCardItem = ({ item }) => (
<CardItem
  image={item.image}
  title={item.title}
  date={item.date}
  hour={item.hour}
/>
);

_keyExtractor = item => item.id;

render() {
return (
  <FlatList
    data={this.props.data}
    renderItem={this._renderCardItem}
    contentContainerStyle={styles.cardcontainer}
    keyExtractor={this._keyExtractor}
  />
);
}
}

const styles = StyleSheet.create({
 cardcontainer: {
  flex: 1,
  overflow: 'hidden',
  backgroundColor: 'white',
  alignItems: 'center',
  width: Dimensions.get('window').width,
  borderWidth: 0,
 },
});
Run Code Online (Sandbox Code Playgroud)

我的数据项具有唯一的ID,标题,日期,小时.

阅读所有可用的指南和文档,找不到解决方案.

swi*_*ell 25

取出flex: 1你的styles.cardcontainer,应该让你滚动.FlatList/ScrollView contentContainerStyleprop包装了所有子组件 - 如果你愿意的话,FlatList中的"内部"是什么,并且永远不应该有一个已定义的高度或弹性值.如果你需要flex: 1为FlatList本身设置一个style={{flex: 1}}替代.干杯!

  • 这解决了我的问题。我在滚动视图中有一个平面列表,并且滚动视图有一个 flex:1 。我一删除它们,它们就会一起滚动。谢谢你! (2认同)
  • 上帝保佑你,伙计。问题出在平面列表的风格上。我花了一周的时间来解决这个问题,直到我找到你的评论。 (2认同)

Kyo*_*agi 10

当我在聊天应用程序中添加图像工具时,我也遇到了这个问题,并且找到了一个技巧解决方案。

只需添加TouchableWithoutFeedback即可覆盖平面列表中的每个元素。奇怪,但可以。

_renderCardItem = ({ item }) => (
<TouchableWithoutFeedback onPress={()=>{}}>
<CardItem
  image={item.image}
  title={item.title}
  date={item.date}
  hour={item.hour}
/>
</TouchableWithoutFeedback>
);
Run Code Online (Sandbox Code Playgroud)


小智 9

我在 FlatList 上也遇到了同样的问题。

<View style={styles.list}>
<FlatList/>
</View>
Run Code Online (Sandbox Code Playgroud)

我用于 flex : 1, flexGrow :1 列表样式。然后它对我有用。


小智 8

只需执行以下步骤即可获得 FlatList 滚动。

<View style={{flex:1}}>
  <FlatList
    data={this.state.data}
    renderItem={({item}) => this.renderData(item)}
    keyExtractor={item => item._id}
    contentContainerStyle={{
    flexGrow: 1,
    }}
  />
</View>
Run Code Online (Sandbox Code Playgroud)


rap*_*lrk 6

对于遇到这个问题的其他人:我的 FlatList 在 TouchableWithoutFeedback 内。我将其更改为视图并能够再次滚动。