1
scrollTo
メソッドをScrollView
にして、押された要素までスクロールします。ScrollView子要素のメジャーは常に返されますframeOffsetY = 0
各子供はref
を持ち、小道具でトリガーされ、offsetY
のスクロールが正しくスクロールするのに十分です。
frameOffsetY
のthis.componentRef.measure
に返される値は常に0であるため、常にScrollViewの先頭にスクロールします。子コンポーネント
measureOffset() {
this.componentRef.measure(
(frameOffsetX, frameOffsetY, width, height, pageOffsetX, pageOffsetY) => {
console.log(frameOffsetX, frameOffsetY, width, height, pageOffsetX, pageOffsetY);
this.setState({ offsetY: frameOffsetY });
}
);
}
render() {
return (
<View
ref={ref => this.componentRef = ref}
style={{ opacity: 1, flex: 1 }}
onLayout={() => this.measureOffset()}
>
...
</View>
);
}
のコードの下
親コンポーネントは、私は何かが欠けていたり、それが反応ネイティブのバグだ場合、私はわからないScrollView
renderBuses() {
return this.props.buses.map(bus =>
<BusDetail
key={bus.reg_code}
bus={bus}
scrollTo={y => ScrollViewRef.scrollTo({ y })}
/>
);
}
render() {
return (
<View style={{ flex: 1, backgroundColor: '#e6e6e6' }}>
<ScrollView
style={{ flex: 1 }}
ref={ref => ScrollViewRef = ref}
>
{this.renderBuses()}
</ScrollView>
</View>
);
}
です。
ご協力いただきありがとうございます。