React Native ScrollView 在发布后快速回到顶部

React Native ScrollView snapping back to top after release

我在其他应用程序中使用了 ScrollView,只添加了 style={styles.container} 样式。然而,在这个应用程序中,我正在创建我的样式,我有 alignItems:'flex-start',它会抛出一个只有 style={styles.container} 的错误,而你需要通过 contentContainerStyle={styles.container} 传递 alignItems:'flex-start'

错误:Invariant Violation: ScrollView child layout (["alignItems"]) must by applied through the contentContainerStyle prop.

然而,当我在视图中向下滚动时添加 contentContainerStyle,一旦手指离开 phone(或在模拟器中释放鼠标),滚动会自动返回到最佳。如果我只使用 style={styles.container} 并取出 alignItems:'flex-start' 它会正确滚动,但我在 UI 中的项目没有列出我需要它们的方式。是什么导致它使用 contentContainerStyle 滚动回顶部,是否有解决方法?

渲染:

var _that = this;
var iconsToShow = icons.map(function (icon, i){
  if(i < 81){
    return (
      <TouchableHighlight
        onPress={() => _that.changeIcon(indexToChange, icon)}
        underlayColor='#F7F7F7'
        key={i}>
          <Text style={styles.iconText}><IonIcons name={icon} size={30} color="#555" /></Text>
      </TouchableHighlight>
    );
  }
});

return (
  <Carousel width={SCREEN_WIDTH} animate={false} indicatorColor="#444" inactiveIndicatorColor="#999" indicatorAtBottom={false} indicatorOffset={16}>
    <View>
      <ScrollView contentContainerStyle={styles.container}>{iconsToShow}</ScrollView>
    </View>

    <View>
      //next page for carousel
    </View>

  </Carousel>
);

我想出了如何让它滚动。而不是让 View 包装 ScrollViewScrollView 具有任何弹性样式或 alignItems:'flex-start'contentContainerStyle={styles.container},而是将其放在 View 上是 ScrollView 的子项,只需使用 style= 而不是 contentContainerStyle=

渲染:

<ScrollView style={styles.container}>
    <Text style={styles.goalName}>{goal}</Text>
    <View style={styles.viewContainer}>
        {iconsToShow}
    </View>
</ScrollView>

样式:

var styles = StyleSheet.create({
    container: {
        backgroundColor: 'transparent',
        paddingLeft:20,
        paddingRight:20
    },
    viewContainer:{
        flexDirection:'row',
        flexWrap: 'wrap',
        alignItems: 'flex-start',
        flex: 1
    },
    iconText:{
        paddingLeft:15,
        paddingRight:15,
        paddingTop:15,
        paddingBottom:15
    },
    goalName:{
        textAlign:'center',
        marginTop:40,
        marginBottom:10,
        fontSize:20
    }
});

如果仍然无法解决问题,请尝试将 {flex: 1} 放入 "all" ScrollView

的父级中