【发布时间】:2019-11-04 16:08:43
【问题描述】:
我正在尝试在 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 是问题,因为它具有随机值(有时是负值,有时是大数字),不知道如何解决。
【问题讨论】:
-
自动滚动需要做什么?例如,我有 3 件物品,您要移到另一件吗?
-
@idan 你有一个列表,如果屏幕尺寸大于你不滚动的列表尺寸,一旦它溢出它应该滚动到右边,一旦它减小到小于项目应位于左侧的屏幕
-
如果我理解正确,请告诉我 - 您以水平方式显示列表,如果列表大于屏幕宽度,您想自动滚动到屏幕末尾?
-
@Idan 对,如果它再次将尺寸减小到小于屏幕的尺寸,则将内容保持在左侧而不是右侧
-
我用代码附上了答案
标签: reactjs react-native react-native-scrollview