React Native забезпечує .measure(...)
метод, який приймає зворотний виклик і викликає його зі зміщеннями та шириною / висотою компонента:
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)
})
Приклад ...
Далі обчислюється макет користувацького компонента після його відтворення:
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)
})
}
}
Примітки про помилки
Зверніть увагу, що іноді компонент не закінчує візуалізацію до того, як componentDidMount()
буде викликаний. Якщо в результаті ви отримуєте нулі measure(...)
, тоді обгортання його в a setTimeout
має вирішити проблему, тобто:
setTimeout( myComponent.measure(...), 0 )
measure
мене не спрацював. Довелося пройти дескриптор елемента:const handle = findNodeHandle(this.refs.dropdown); UIManager.measure(handle, (x, y, ...) ...)