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
包装 ScrollView
和 ScrollView
具有任何弹性样式或 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
的父级中
我在其他应用程序中使用了 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
包装 ScrollView
和 ScrollView
具有任何弹性样式或 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
的父级中