View
компонент имеет свойство под названием onLayout
.Вы можете использовать это свойство, чтобы получить положение этого компонента.
onLayout
Вызывается при изменении монтирования и макета с помощью:
{nativeEvent: { layout: {x, y, width, height}}}
Это событие вызывается сразу после расчета макета, но новый макет может еще не отображаться на экране во время получения события, особенно если выполняется анимация макета.
Обновление
onLayout
prop дает позицию родительскому компоненту.Это означает, что для определения позиции SubView2
необходимо получить общее количество всех родительских компонентов (MyComponent2
+ SubView1
+ SubView2
).
Образец
export default class App extends Component {
state = {
position: 0,
};
_onLayout = ({ nativeEvent: { layout: { x, y, width, height } } }) => {
this.setState(prevState => ({
position: prevState.position + y
}));
};
componentDidMount() {
setTimeout(() => {
// This will scroll the view to SubView2
this.scrollView.scrollTo({x: 0, y: this.state.position, animated: true})
}, 5000);
}
render() {
return (
<ScrollView style={styles.container} ref={(ref) => this.scrollView = ref}>
<View style={styles.view}>
<Text>{'MyComponent1'}</Text>
</View>
<View style={[styles.view, { backgroundColor: 'blue'}]} onLayout={this._onLayout}>
<Text>{'MyComponent2'}</Text>
<View style={[styles.view, , { backgroundColor: 'green'}]} onLayout={this._onLayout}>
<Text>{'SubView1'}</Text>
<View style={[styles.view, { backgroundColor: 'yellow'}]} onLayout={this._onLayout}>
<Text>{'SubView2'}</Text>
</View>
</View>
</View>
</ScrollView>
);
}
}