我正在尝试在ScrollView中实现自动滚动,但由于某种原因,我无法想到正确的方式来实现,例如,如果我添加一个项目,并且contentSize超出了ScrollView的宽度,则应该滚动到最后,如果我删除一个项目,并且contentSize小于ScrollView的宽度,则应滚动到开头。
这是我到目前为止所拥有的
<ScrollView
horizontal
showsHorizontalScrollIndicator={false}
ref={(scrollView) => {
this.scrollView = scrollView;
}}
onLayout={(e) => {
this.layoutWidth = e.nativeEvent.layout.width;
}}
onContentSizeChange={(contentWidth,contentHeight) => {
this.scrollView.scrollTo({
x: contentWidth > this.layoutWidth ? contentWidth + this.layoutWidth - width : 0,y: 0,animated: true,});
}}>
{contacts.map((contact) => (
<SelectedContacsItem
contact={contact}
onRemoveContactPress={onRemoveContactPress}
key={contact.id}
/>
))}
</ScrollView>
这不适用于删除项目的过程,在最后一个项目上(当内容小于视图时)它将内容移动到随机位置,我添加了onScroll属性并从那里观看了日志,似乎contentOffSet是一个问题,因为它具有随机值(有时为负数,有时为大数),不确定如何解决。