react-native - React Native 滚动动画
问题描述
当我在 FlatList 中上下滚动时,HeaderArea 的高度不会改变它的高度!当我在页面下方滚动并查看平面列表中的项目时,HeaderArea 的大小需要从 减小startHeaderHeight
到endHeaderHeight
. 请帮忙,你能发现我哪里出错了吗?
const START_HEADER_HEIGHT = (ITEM_HEIGHT/5);
const END_HEADER_HEIGHT = (ITEM_HEIGHT/8);
const HEADER_SCROLL_DISTANCE = START_HEADER_HEIGHT - END_HEADER_HEIGHT;
export default class MyClass extends Component {
constructor(props) {
super(props)
this.state = {
columns: 3, //Columns for Grid
/***** Animated scrolling hide header info ****/
scrollY: new Animated.Value(0),
};
}
render() {
const animatedHeaderHeight = this.state.scrollY.interpolate({
inputRange: [0, HEADER_SCROLL_DISTANCE],
outputRange: [START_HEADER_HEIGHT, END_HEADER_HEIGHT],
extraploate: 'clamp'
})
return (
<SafeAreaView style={styles.profileContainer}>
<View style={styles.flatStyle}>
<FlatList
style={styles.scrollViewContent}
numColumns={columns}
data={tempUserImagesArray} //defined elsewhere
scrollEventThrottle={16}
onEndReached={()=>console.log('End reach')}
bounces={false}
onScroll={Animated.event(
[{nativeEvent:{contentOffset: {y: this.state.scrollY}}}],
)}
keyExtractor={ (item, index) => { return index } }
renderItem=
..............
/>
)
}}
/>
</View>
<Animated.View style={[styles.infoArea, { height: animatedHeaderHeight }]}>
//Plain Orange rectangle
</Animated.View>
</SafeAreaView>
)
}
const styles = StyleSheet.create({
profileContainer: {
flex: 1,
},
infoArea: {
//flex: 1,
position: 'absolute',
top: 0,
left: 0,
right: 0,
backgroundColor: 'orange',
overflow: 'hidden',
},
scrollViewContent: {
marginTop: START_HEADER_HEIGHT,
},
flatStyle:{宽度:'100%',高度:START_HEADER_HEIGHT,flex:1},HeaderArea:{
},
grid: {
flex: 1,
flexDirection: 'column',
},
});
}
解决方案
这是您的问题,您将 FlatList 嵌套在 ScrollView 中,当您的 FlatList 被渲染时,它将根据父视图的高度渲染项目数,并且......它的父级(ScrollView)具有无穷大的高度,因此 FlatList 中的所有内容都将是立即渲染,FlatList 将无法滚动。您正在滚动的组件是 ScrollView 而不是 FlatList,这就是您onScroll
无用的原因。
顺便说一句,我认为您正在创建类似于标题折叠视图的内容,标题将在向上滚动时折叠,向下滚动时出现。我最近正在研究它,如果你的设计包含标签,你可以从这篇文章中得到这个想法。使用这个react-native-collapsible-tab-view,相信我,如果它包含标签,重新创建组件会让你大吃一惊。
推荐阅读
- python - Python遍历excel文件以查找信息
- ubuntu-16.04 - 如何打开没有显示的slimerjs?
- maven - Maven:如何将本地 lib 目录用于依赖项而不是 Maven 存储库
- php - 通过单击提交按钮提交表单数据时验证在 PHP 中不起作用
- python - Why groupby in Pandas print not all columns?
- c# - Object is being spammed when it comes to my timeBetweenShot variable, can anyone take a look?
- php - 如何测试本地环境和外部服务(webhook)之间的集成
- html - 如何使字体 FuturaPtBooks 在 html 中可用
- apache-kafka - Kafka 代理在清理日志文件时关闭
- git - 如何将作者从 svn 映射到 git?