React Native Expo — Сброс прокрутки в верхнюю часть прокрутки после рендеринга

#javascript #react-native #expo #scrollview #scrolltop

Вопрос:

У меня есть большое представление прокрутки, которое содержит различные изображения и текстовые элементы. В настоящее время, когда я нажимаю на маркер карты в своем представлении карты, в окне прокрутки ниже отображается выбранный в данный момент маркер. Проблема в том, что при изменении этого представления прокрутка по-прежнему остается прокрученной вниз, что означает, что пользователи могут быть потеряны. Я хотел бы сбрасывать вид прокрутки наверх каждый раз, когда данные повторно отображаются, чтобы отобразить информацию о другом маркере карты.

Вот как я попытался это сделать, основываясь на других примерах:

 function Map() {

......
// Creating Ref for ScrollView
   const scrollViewRef = React.createRef();

   const pressMarker = (i) => {
      setCurrentMarker(i);
      console.log(CurrentMarker) // Log the current data of marker displayed
      this._map.animateToRegion({
         latitude: i.Latitude,
         longitude: i.Longitude,
         latitudeDelta: 0.0015,
         longitudeDelta: 0.0015,
       });
    // Below: trying to trigger scrollview to return to top when marker is pressed.
       scrollViewRef?.current?.useScrollToTop;
    // I have tried this method also with no succes:
       scrollViewRef.current?.scrollTo(0, 0, true);

      return(CurrentMarker)
    };
.....
<MapView
        initialRegion={{ latitude: ******, longitude: ********, latitudeDelta: 0.01, longitudeDelta: 0.01 }}
        style={{ flex: 1, minHeight: windowHeight }}
        provider={PROVIDER_GOOGLE}
        customMapStyle={mapStyle}
        showsUserLocation={true}
        ref={(map) => (this._map = map)}
      >
        {users.map((i, index) => (
          <Marker key={index} onPress = {() => pressMarker(i)}
            coordinate={{ latitude: i.Latitude, longitude: i.Longitude }}
            title={i.Title} 
          />
        ))}
      </MapView>

      <View style={styles.expandingView}>
         <TouchableOpacity style={styles.touchableButton } onPress={toggleCollapsed}>
            <Text style={styles.markerTitle}>{CurrentMarker.PreviewTitle}</Text>
            <Image source={require("../assets/upArrowWhite.png")} style={styles.arrowLogo}></Image>
         </TouchableOpacity>
         <Animated.View style={{maxHeight: animationHeight}}>
            <ScrollView style={styles.scrollviewContainer}
               ref={scrollViewRef} // Assigning Scrollview Ref
            >
               <View style={{bottom: 0, flex: 1, paddingBottom: 900, height: '100%'}}>
                  <View style={styles.ImageContainer}>
                     <Image style={styles.markerImage} source={{ url: CurrentMarker.ImageUrl }}/>
                     <Text style={styles.imageComment}>{CurrentMarker.ImageComment}</Text>
                  </View>
                  <View>
                     <Text style={styles.markerTitleScrollview}>{CurrentMarker.Title}</Text>

                  </View>
               </View>
            </ScrollView>
         </Animated.View>
      </View>
.......
 

Однако этот метод, по-видимому, не является эффективным. Я думал, что это будет относительно легко, так как мне не нужно добавлять прослушиватели событий или что-то еще, я просто хочу, чтобы вид прокрутки возвращался наверх при нажатии на маркер, функция, которая уже эффективно работает заранее.