React Native - Как измерить размер контента в ScrollView?
Я хочу измерить размер содержимого в моем ScrollView
,
Поэтому я использую measure
от NativeMethodsMixin
:
import NativeMethodsMixin from 'NativeMethodsMixin'
Я не совсем уверен, куда идти отсюда, большинство сообщений SO, касающихся этой проблемы, похоже, устарели.
Я понимаю, что мне нужно создать ref
к моему ScrollView
(который я сделал и назвал _scrollView
Я могу получить к нему доступ, используя this.refs._scrollView
).
Проблема в том, что я не могу просто пройти this.refs._scrollView
в measure
вот так:
NativeMethodsMixin.measure(this.refs._scrollView, (data) => {
console.log('measure: ', data)
})
Я получаю следующую ошибку:
ExceptionsManager.js:61 findNodeHandle(...): Argument is not a component (type: object, keys: measure,measureInWindow,measureLayout,setNativeProps,focus,blur,componentWillMount,componentWillReceiveProps)
Затем я попытался получить фактический дескриптор узла, используя findNodeHandle
и передать его в measure
как обсуждалось в этом выпуске github:
const handle = React.findNodeHandle(this.refs._scrollView)
NativeMethodsMixin.measure(handle, (data) => {
console.log('measure: ', data)
})
Но это приводит к той же ошибке. Есть идеи?
2 ответа
Решение
NativeMethodsMixin.measure.call(elementToMeasure, (x, y, width, height) => {
...
});
ScrollView определяет реквизит с именем onContentSizeChange:
<ScrollView
onContentSizeChange={(width, height) => {
console.log(width, height);
}}>
{content}
</ScrollView>