React Native bietet eine .measure(...)
Methode, die einen Rückruf entgegennimmt und ihn mit den Offsets und der Breite / Höhe einer Komponente aufruft:
myComponent.measure( (fx, fy, width, height, px, py) => {
console.log('Component width is: ' + width)
console.log('Component height is: ' + height)
console.log('X offset to frame: ' + fx)
console.log('Y offset to frame: ' + fy)
console.log('X offset to page: ' + px)
console.log('Y offset to page: ' + py)
})
Beispiel...
Im Folgenden wird das Layout einer benutzerdefinierten Komponente nach dem Rendern berechnet:
class MyComponent extends React.Component {
render() {
return <View ref={view => { this.myComponent = view; }} />
}
componentDidMount() {
this.myComponent.measure( (fx, fy, width, height, px, py) => {
console.log('Component width is: ' + width)
console.log('Component height is: ' + height)
console.log('X offset to frame: ' + fx)
console.log('Y offset to frame: ' + fy)
console.log('X offset to page: ' + px)
console.log('Y offset to page: ' + py)
})
}
}
Fehlerhinweise
Beachten Sie, dass die Komponente manchmal das Rendern nicht beendet, bevor sie componentDidMount()
aufgerufen wird. Wenn Sie als Ergebnis Nullen erhalten measure(...)
, setTimeout
sollte das Problem durch Einwickeln in a gelöst werden, dh:
setTimeout( myComponent.measure(...), 0 )
measure
hat bei mir nicht funktioniert. Musste Element Handle übergeben:const handle = findNodeHandle(this.refs.dropdown); UIManager.measure(handle, (x, y, ...) ...)