2016-05-15 5 views
0

Добрый день,Контейнер не сообщается размер правильно от RCTUIManager.measure и OnLayout

Я пытаюсь программно прокручивать Scrollview, который содержит вид контейнера, который больше, чем ScrollView в истинном размере. Однако ScrollView должен отсекать контейнер с заданным размером. Поэтому, если высота ScrollView составляет 600 пикселей, а размер контейнера - 1000 пикселей, тогда мне нужен доступ к 1000px, чтобы я мог прокручивать программно. Эта проблема была решена на github для другого разработчика здесь, но это, похоже, не работает для меня. Вот то, что я пробовал:

<ScrollView> <View onLayout={(event) => {console.log(event.nativeEvent.layout);}> ... </View> </ScrollView>

Попытка 1: Положите обратный вызов OnLayout в обоих Scrollview и внутренний просмотре и использовать высоту макета Innerviews. Результат: Это не работает как ScrollView и внутренний View сообщают высоту 600.

Попытка 2: Сохранить ссылку на ScrollView, а затем вызвать функцию измерения RCTUIManager в более поздние точки так:

RCTUIManager.measure(this.refs.scrollView.getInnerViewNode(), (...data)=>{console.log(data)});

Результат: Это тоже не сработало, innerViewNode снова сообщает о высоте контейнера (4-й параметр в данных) 600.

У любого есть разное решение для получения высоты контейнера? Я определенно помещаю представление 1000 px в виде прокрутки в 600 пикселей и, когда я прокручиваю программно, говорю 100px, я вижу, что контент на самом деле больше, чем оболочка ScrollView.

Спасибо за любую помощь, которую любой может предоставить!

ответ

0

Вот решение, которое я нашел работу:

<ScrollView> 
    {{...components of variable length...}} 
    <View key="bottomMarker" onLayout={() => {console.log(event.nativeEvent.layout.y)}}></View> 
</ScrollView> 

Используя View в качестве маркеров для нижней части, вы можете найти расположение нижней части окна прокрутки.

Смежные вопросы