Reactjs 阻止Flatlist在内容大小更改时滚动到顶部
在Reactjs 阻止Flatlist在内容大小更改时滚动到顶部,reactjs,react-native,react-native-flatlist,react-native-scrollview,react-native-paper,Reactjs,React Native,React Native Flatlist,React Native Scrollview,React Native Paper,在平面列表中我有手风琴(按)。当我滚动到任何位置并打开/关闭手风琴时,FlatList滚动到屏幕顶部。我应该如何预防它 换言之,当手风琴展开时,内容大小会发生变化。如何保持用户在内容大小更改时的位置。当前代码段不工作,存储的y位置将重置 const flatListRef = React.useRef<FlatList<any>>(null); const yOffset = React.useRef<number>(0); &
平面列表中
我有手风琴(按)。当我滚动到任何位置并打开/关闭手风琴时,FlatList
滚动到屏幕顶部。我应该如何预防它
换言之,当手风琴展开时,内容大小会发生变化。如何保持用户在内容大小更改时的位置。当前代码段不工作,存储的y位置将重置
const flatListRef = React.useRef<FlatList<any>>(null);
const yOffset = React.useRef<number>(0);
<FlatList
ref={flatListRef}
data={properties}
renderItem={renderItem}
keyExtractor={(item) => `${item.id}`}
onContentSizeChange={() =>{flatListRef.current!.scrollToOffset({offset: yOffset.current, animated: false});}}
onEndReached={onEndReached}
onEndReachedThreshold={0}
scrollEventThrottle={15}
onScroll={(e) => {yOffset.current = e.nativeEvent.contentOffset.y;}}
ListFooterComponent={<ActivityIndicator animating={loading} size="small" />}
/>
const flatListRef=React.useRef(null);
const yOffset=React.useRef(0);
`${item.id}`}
onContentSizeChange={()=>{flatListRef.current!.scrollToOffset({offset:yOffset.current,动画:false});}
onEndReached={onEndReached}
onEndReachedThreshold={0}
scrollEventThrottle={15}
onScroll={(e)=>{yOffset.current=e.nativeEvent.contentOffset.y;}}
ListFooterComponent={}
/>
例如,(在contentSizeChange
conosle.log(yOffset.current)
中)如果我滚动到yOffset850
并在那里检查手风琴,我会在控制台中看到两个日志,850
,然后126
(126返回顶部),这表明,onScroll被调用,yOffset被更改。不确定您的问题,但如果您不想在accordion展开中滚动到顶部,只需删除onContentSizeChange
和onScroll
道具
此外,如果您想在屏幕顶部的手风琴上使用该按钮,只需将
手风琴
包装在视图
中,并使用onLayout
道具获得视图
的展开高度/xy坐标,然后您就可以使用平面列表的scrollToOffset()
要滚动到特定的手风琴
能否将其放入代码沙盒中?能否在expo零食中提供最小的工作代码?也许,这样我们就可以解决问题了。您可以使用zIndex
将一个视图置于另一个视图之上。尝试将您的FlatList
放在视图中,或者给它一个类并使用zIndex
。它的工作原理与CSS z-index属性类似-具有较大的zIndex
的组件将呈现在顶部,并且不会影响或更改其他元素的位置。