3

我正在努力做到这一点,所以每当新的东西被渲染到滚动视图中时,滚动视图将保持不变并且不会上下颠簸。现在,如果渲染了一个新组件,则滚动视图似乎被重置为 0。

有没有办法阻止这种行为并保持立场?

现在对于我正在使用的滚动视图:

handleScrollt(event){
    this.scroll = event.nativeEvent.contentOffset.y
  }

handleSizet(width, height){
  if (this.scroll) {
    const position = this.scroll + height - this.height
    this.refs.sv.scrollTo({x: 0, y: position, animated: false})
  }
  this.height = height
}



  <ScrollView
      ref="sv"

       scrollEventThrottle={16}

       onScroll={this.handleScrollt.bind(this)}
  onContentSizeChange={this.handleSizet.bind(this)}

这个问题是滚动视图会在滚动到正确的偏移量之前短暂呈现。所以看起来屏幕顶部有短暂的飞溅

4

2 回答 2

0

您必须为滚动视图定义一个高度。

如果滚动视图应该覆盖整个视图,您可以通过以下方式获取视图的高度:

<View style={styles.contactView} onLayout={(event) => { 
  var contactViewY = event.nativeEvent.layout.y;
  this.setState({contactViewY: contactViewY})
}}>

然后把它交给滚动视图

<ScrollView style={[styles.contactScroller, {height: this.state.contactViewY}]}>

请记住,onLayout 方法在计算完布局后立即调用,因此如果稍后视图的高度发生变化,仅这两行代码不会更新它。

于 2019-10-13T18:44:12.117 回答
-1

你应该试试maintainVisibleContentPosition

例子:

<ScrollView
    {...props}
    maintainVisibleContentPosition={{
      minIndexForVisible: 0,
    }}
/>

从文档:

维护可见内容位置

设置后,滚动视图将调整滚动位置,以便当前可见且处于或超过 minIndexForVisible 的第一个子级不会更改位置。这对于双向加载内容的列表很有用,例如聊天线程,其中进来的新消息可能会导致滚动位置跳跃。值 0 很常见,但其他值(例如 1)可用于跳过加载微调器或其他不应保持位置的内容。

于 2019-10-13T18:58:30.703 回答