ScrollView子元素度量始终返回frameOffsetY = 0

时间:2017-12-16 03:45:20

标签: listview react-native

我想使用scrollTo的{​​{1}}方法滚动到所按的元素。

ScrollView中的每个孩子都有ScrollView,并且使用ref道具触发了该指标,状态为onLayout就足以正确触发滚动。

offsetYthis.componentRef.measure返回的值始终为0,因此它始终滚动到ScrollView的开头。

在子组件的代码下面

frameOffsetY

父组件是ScrollView

  measureOffset() {
    this.componentRef.measure(
      (frameOffsetX, frameOffsetY, width, height, pageOffsetX, pageOffsetY) => {
        console.log(frameOffsetX, frameOffsetY, width, height, pageOffsetX, pageOffsetY);
        this.setState({ offsetY: frameOffsetY });
      }
    );
  }

  render() {
    return (
      <View
        ref={ref => this.componentRef = ref}
        style={{ opacity: 1, flex: 1 }}
        onLayout={() => this.measureOffset()}
      >
      ...
      </View>
    );
 }

我不确定我是否遗漏了某些内容,或者这是React Native的错误。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

请注意,在本机完成渲染之后,这些测量才可用。如果您需要尽快进行测量,请考虑使用onLayout道具。

请参阅here

初始化时会调用

onLayout,此处的调用测量将无法获得实际测量值。

有一个onLayout函数的参数,像这样使用

onLayout={(e)=>{
  let obj = e.nativeEvent.layout;
  console.log(obj.width);
  console.log(obj.height);
}