Grundsätzlich, wenn Sie Größe festlegen möchten und es dann gesetzt machen ändern, wie dies auf das Layout angeben:
import React, { Component } from 'react';
import { AppRegistry, StyleSheet, View } from 'react-native';
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: 'yellow',
},
View1: {
flex: 2,
margin: 10,
backgroundColor: 'red',
elevation: 1,
},
View2: {
position: 'absolute',
backgroundColor: 'orange',
zIndex: 3,
elevation: 3,
},
View3: {
flex: 3,
backgroundColor: 'green',
elevation: 2,
},
Text: {
fontSize: 25,
margin: 20,
color: 'white',
},
});
class Example extends Component {
constructor(props) {
super(props);
this.state = {
view2LayoutProps: {
left: 0,
top: 0,
width: 50,
height: 50,
}
};
}
onLayout(event) {
const {x, y, height, width} = event.nativeEvent.layout;
const newHeight = this.state.view2LayoutProps.height + 1;
const newLayout = {
height: newHeight ,
width: width,
left: x,
top: y,
};
this.setState({ view2LayoutProps: newLayout });
}
render() {
return (
<View style={styles.container}>
<View style={styles.View1}><Text>{this.state.view2LayoutProps.height}</Text></View>
<View onLayout={(event) => this.onLayout(event)} style={[styles.View2, this.state.view2LayoutProps]} />
<View style={styles.View3} />
</View>
);
}
}
AppRegistry.registerComponent(Example);
Sie kann viel mehr Variationen davon erstellen, wie es geändert werden soll, indem Sie dies in einer anderen Komponente verwenden, die eine andere Ansicht als Wrapper hat und einen onResponderRelease-Callback erstellt, der den Berührungsereignisspeicherort in den Status übergibt, der dann an die untergeordnete Komponente übergeben werden kann Eigentum, das könnte über Fahrt onLayout aktualisierten Zustand, indem Sie {[styles.View2, this.state.view2LayoutProps, this.props.touchEventTopLeft]}
und so weiter platzieren.
Das Problem dieses Ansatzes ist, wenn Gerät rotiert/Ansicht Größe ändert, bekomme ich onlayout nicht erneut aufgerufen. – Matthew
onLayout wird aufgerufen, wenn sich der Rahmen der Ansicht ändert. Vielleicht verändert Ihre Ansicht nicht ihre Größe oder Position bei Rotation. Sehen Sie sich das onLayout-Beispiel im UIExplorer an, in dem onLayout bei der Rotation aufgerufen wird. – ide
Angenommen, ich möchte eine "Ansicht" abhängig von den Abmessungen unterschiedlich anzeigen. Ich verstehe nicht, wie ich mit der OnLayout-Funktion der View ändern kann, wie ich die View anzeigen kann. Führt das nicht zu einer Endlosschleife? –