React Native ScrollView在发布后抢回回顶部

Chi*_*ipe 10 scrollview react-native

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

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

但是当我contentContainerStyle在视图中向下滚动时添加时,一旦手指从手机上抬起(或在模拟器中释放鼠标),滚动会自动返回到顶部.如果我只是使用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>
);
Run Code Online (Sandbox Code Playgroud)

Chi*_*ipe 19

我想出了如何让它滚动.而不是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>
Run Code Online (Sandbox Code Playgroud)

造型:

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
    }
});
Run Code Online (Sandbox Code Playgroud)