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>
Другие вопросы по тегам