React Native DraggableFlatList安卓真机无法滚动,模拟器正常求助
解决安卓真机上DraggableFlatList嵌套ScrollView无法滚动的问题
你遇到的问题核心是滚动容器嵌套冲突:DraggableFlatList本身基于FlatList实现,自带完整的滚动功能,外层再套ScrollView会导致安卓真机上的触摸事件被拦截,进而无法正常滚动(模拟器因为触摸事件模拟机制,冲突表现不明显)。
直接按下面的方式修改即可解决:
方案1:移除外层ScrollView(优先推荐)
既然DraggableFlatList本身就支持滚动,完全不需要额外嵌套ScrollView,直接把它作为滚动容器使用:
<DraggableFlatList style={{ flex: 1 }} data={Object.keys(data)} vertical renderItem={({ item, index, drag, isActive }) => renderItem({ item, index, drag, isActive })} keyExtractor={(item) => item} onDragEnd={handleDragEnd} />
方案2:如果需要头部/尾部内容,用组件自带属性
要是你原本套ScrollView是为了加额外的头部或尾部内容,直接用DraggableFlatList的ListHeaderComponent和ListFooterComponent属性即可,避免嵌套:
<DraggableFlatList style={{ flex: 1 }} data={Object.keys(data)} vertical renderItem={({ item, index, drag, isActive }) => renderItem({ item, index, drag, isActive })} keyExtractor={(item) => item} onDragEnd={handleDragEnd} // 自定义头部 ListHeaderComponent={() => ( <View style={{ padding: 16, backgroundColor: '#f5f5f5' }}> <Text>照片列表</Text> </View> )} // 自定义尾部 ListFooterComponent={() => ( <View style={{ height: 20 }} /> )} />
额外检查点
- 确保
DraggableFlatList的父容器设置了flex: 1,给足布局空间,避免因为容器高度不足导致滚动失效。 - 不要给
DraggableFlatList设置固定高度(除非你明确需要),让它自适应父容器空间。
内容的提问来源于stack exchange,提问作者Megha Kn
相关产品推荐
相关产品推荐

