3

Когда вы используете ScrollView или ListView в своем приложении ReactNative, и появились некоторые новые данные, их поведение по умолчанию заключается в том, чтобы сохранить позицию в компоненте Scroll. Это означает, что если новые данные высотой 20 появятся, когда вы находитесь в середине ScrollView, экранные элементы будут скользить на 20, а иногда и будут выходить из экрана.Как сохранить позицию в ScrollView или ListView?

Есть ли способ сохранить/отследить позицию? например, если появились новые данные высотой 20, позиция автоматически отрегулирует положение на 20, чтобы на экране отображалось текущее значение на экране. Заранее спасибо.

+1

Это может помочь вам http://stackoverflow.com/a/36803008/3790046 –

+1

@HenrikR Да, это определенно альтернативный способ сделать это, но он вызывает изменение позиции в onContentSizeChange, что означает, что он корректирует позицию после содержимого размер уже изменился и изменил бы позицию после этого, так что он столкнется с плохим UX. – Dave

ответ

1

У меня есть рабочее решение, хотя это не очень гладко, это делает работу:

handleScroll = (event) => { 
    this.scroll = event.nativeEvent.contentOffset.y 
    if (this.ready && this.scroll < SCROLL_TRIGGER) { 
    // load more stuff here 
    } 
} 

handleSize = (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 
} 

// render: 

<ScrollView ref="sv" 
    scrollEventThrottle={16} 
    onScroll={this.handleScroll} 
    onContentSizeChange={this.handleSize} 
> 
    {content} 
</ScrollView> 

Если кто-то сделал что-то гладкое, дайте нам знать!