问题
使用ScrollView的时候,react native有一个contentOffset变量,可以在渲染时设置初始变量,很多时候如果渲染成功在设置初始位置,会出现瞬间跳动等问题。
然后iOS是没有问题的,部分安卓机例如三星也是没问题,但是类似华为这样的安卓机就会出现失效的问题,原因是出在Android某些系统没有设置初始的scroll position导致的。
contentOffset设置方式如下:
{ this.scrollViewRef = ref }}
pagingEnabled = {true}
bounces={false}
showsHorizontalScrollIndicator = {false}
showsVerticalScrollIndicator = {false}
horizontal = {true}
pagingEnabled={true}
alwaysBounceHorizontal = {true}
scrollEnabled = {false}
contentOffset = { this.state.filterNumber === 1 ? {x:ScreenUtil.screenW, y:0} : {x:0, y:0}}
>
解决方式
For anyone who can make this, these are the attributes in Android's native ScrollView.
android:scrollX The initial horizontal scroll offset, in pixels.
android:scrollY The initial vertical scroll offset, in pixels.
如果了解安卓的话,在安卓端进行重设初始变量。
不了解安卓的话,可以用另一种方式解决,就是用React native方法:
有人肯定用这种方式解决:
componentDidMount() {
setTimeout(() => {
this.scrollView.scrollTo({x: 100});
}, 0);
}
但是这种是渲染后才滑动的,理论上可以解决,但是很有可能还是会出现跳动的情况。
所以最佳解决方式如下:
this.scrollView = scrollView}
onContentSizeChange={() => {
this._onContentSizeChange();
}}
>
_onContentSizeChange() {
let initialYScroll = 200;
this.scrollView.scrollTo({x: 0, y: 100, animated: false});
};
_onContentSizeChange API解释如下:
Called when scrollable content view of the ScrollView changes.
Handler function is passed the content width and content height as parameters: (contentWidth, contentHeight)
It's implemented using onLayout handler attached to the content container which this ScrollView renders.
第一次渲染的时候一定会调用这个方法,所以在这个方法内去修改scrollView的初始位置即可,这样就不会见到scrollView闪烁跳动到指定位置的情况。