我尝试在React Nativefor Android中使用水平ScrollView,其中起始位置位于滚动图像的中间,而不是(0,0)。scrollTo
方法似乎在componentDidMount
中被正确调用,但应用程序中没有任何移动,它仍然显示为开始向左滚动。
由于这是Android,我没有访问contentOffset props的权限,或者我会直接设置它,根据文档。
'use strict';
var React = require('react-native');
var {
StyleSheet,
View,
Text,
ScrollView,
Component,
} = React;
var precomputeStyle = require('precomputeStyle');
class Carousel extends Component {
constructor(props, context) {
super(props, context);
//this.changeContent = this.changeContent.bind(this);
}
componentDidMount() {
this.myScroll.scrollTo(100);
console.log("called DidMount");
}
render() {
return (
<View style={{flex: 1}}>
<ScrollView ref={(ref) => this.myScroll = ref}
contentContainerStyle={styles.container}
horizontal={true}
pagingEnabled={true}
showsHorizontalScrollIndicator={false}
bounces={true}
onMomentumScrollEnd={this.onAnimationEnd}
>
{this.props.children}
</ScrollView>
</View>
);
}
onAnimationEnd(e) {
console.log("curr offset: " + e.nativeEvent.contentOffset.x);
}
}
var styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
},
page: {
alignItems: 'center',
justifyContent: 'center',
borderWidth: 1,
},
});
module.exports = Carousel;
6条答案
按热度按时间cmssoen21#
我有同样的问题,浪费了几个小时没有它:
因此,您必须在动画之后延迟它
2hh7jdfx2#
我想避免使用延迟和计时器,所以经过一番挖掘,我发现使用
onLayout
工作起来非常流畅:xiozqbni3#
这在React Native 0.44.0上有效。感谢@Eldelshell的提示。它似乎也适用于任何超时值。至少在模拟器上是这样。我发现涉及
InteractionManager.runAfterInteractions
的答案对解决这个问题没有任何作用,但可能这是版本的差异。cgyqldqp4#
我认为应该有一个更现代的,钩子的版本:
4nkexdtk5#
332nm8kg6#
谢谢@David Nathan,使用
InteractionManager
对我很有效。还要注意,与
setTimeout
不同,runAfterInteractions
将不延迟活动动画。从InteractionManager docs开始