【问题标题】:Scroll horizontal and vertical with ScrollViews in React Native在 React Native 中使用 ScrollViews 水平和垂直滚动
【发布时间】:2021-06-09 01:50:56
【问题描述】:

我尝试实现如下水平和垂直滚动:

ScrollPreviewMock.

水平滚动将特色内容显示为图像(应该是可点击的)。垂直滚动还有其他可点击的项目。

我的第一次尝试是使用两个具有绝对位置的 ScrollView,但水平 ScrollView 会消耗所有触摸事件(即使在添加了 pointerEvents={"box-none"} 之后)。

这就是我在那种情况下尝试过的:

import React, { Component } from "react";
import { Dimensions, ScrollView, Text, StyleSheet, View } from "react-native";
const DimensionsWindowWidth = Dimensions.get("window").width;

export default class App extends Component {
    render() {
        return (
            <View style={styles.container}>
                <ScrollView horizontal={true} style={styles.scrollView}>
                    <View style={styles.slide}>
                        <Text>H1</Text>
                    </View>
                    <View style={styles.slide}>
                        <Text>H2</Text>
                    </View>
                    <View style={styles.slide}>
                        <Text>H3</Text>
                    </View>
                </ScrollView>
                <ScrollView pointerEvents={"box-none"} style={styles.scrollView}>
                    <View style={styles.item}>
                        <Text>V1</Text>
                    </View>
                    <View style={styles.item}>
                        <Text>V2</Text>
                    </View>
                    <View style={styles.item}>
                        <Text>V3</Text>
                    </View>
                    <View style={styles.item}>
                        <Text>V4</Text>
                    </View>
                </ScrollView>
            </View>
        );
    }
}

const styles = StyleSheet.create({
    container: {
        flex: 1
    },
    slide: {
        padding: 100,
        width: DimensionsWindowWidth,
        height: "100%"
    },
    scrollView: {
        position: "absolute",
        width: "100%",
        height: "100%"
    },
    item: {
        margin: 40,
        height: 100
    }
});

(也可以当零食:https://snack.expo.io/Hyb7x-qQQ

我的第二次尝试是使用 PanResponder 并在 onPanResponderMove 方法中使用 ScrollViews scrollTo 方法。但似乎我必须自己实现所有特殊的 ScrollView,例如平滑滚动和反弹。

有什么想法可以解决这个问题,同时让水平背景和垂直滚动的项目都可点击?

【问题讨论】:

  • 你在哪里可以用纯 JS 做到这一点?

标签: react-native


【解决方案1】:

在 IOS 中,您可以简单地使用嵌套的 ScrollView 来实现此类行为,但在 Android 中,您将需要其他东西。

看看react-native-nested-scroll-view,它声称仅适用于 Android。我没有使用它,但似乎它使用了原生的 NestedScrollView 类。

【讨论】:

    【解决方案2】:

    这里是我如何在我的应用程序中为我的 Grid Table 实现垂直和水平滚动。它适用于我在 IOS 和 ANDROID 上。希望对你有帮助。

     import {Dimensions, AsyncStorage,View,Image, TextInput,ScrollView,FlatList, Platform} from 'react-native';
    
    const {width, height} = Dimensions.get("window"),
        vw = width / 100
    vh = height / 100
    
    
    styles={
        parentScrollViewStyle: {
            height: height-300,
            borderWidth: 1,
            borderColor: '#D3D3D3'
        },
        childScrollViewStyle: {
            borderWidth: 1,
            borderColor: '#D3D3D3'
        },
        gridStyle: {
            width: '100%',
            marginTop: 20
        }
    }
    
    
    
    
    <Grid style={styles.gridStyle} >
    
        <ScrollView style={styles.parentScrollViewStyle}>
            <ScrollView horizontal={true}  contentContainerStyle={styles.childScrollViewStyle}>
    
             //here your child views to render.
    
            </ScrollView>
        </ScrollView>
    </Grid>
    

    【讨论】:

    • 从哪里导入网格
    【解决方案3】:

    在这里我可以垂直和水平滚动。我在安卓上测试过。

    import React, { Component } from "react";
    import { List, ListItem, Text } from "native-base";
    import { View, ScrollView } from "react-native";
    
    class Table extends Component {
        render() {
            return (
                <View>
                    <ScrollView>
                    <ScrollView horizontal={true}>
                        <List>
                        <ListItem>
                            <Text>COMEDY </Text>
                            <Text>Hangover </Text>
                            <Text>COMEDY </Text>
                            <Text>Hangover </Text>
                            <Text>COMEDY </Text>
                            <Text>Hangover </Text>
                        </ListItem>
                        <ListItem>
                            <Text>COMEDY </Text>
                            <Text>Hangover </Text>
                            <Text>COMEDY </Text>
                            <Text>Hangover </Text>
                            <Text>COMEDY </Text>
                            <Text>Hangover </Text>
                        </ListItem>
                        <ListItem>
                            <Text>COMEDY </Text>
                            <Text>Hangover </Text>
                            <Text>COMEDY </Text>
                            <Text>Hangover </Text>
                            <Text>COMEDY </Text>
                            <Text>Hangover </Text>
                        </ListItem>
                        <ListItem>
                            <Text>COMEDY </Text>
                            <Text>Hangover </Text>
                            <Text>COMEDY </Text>
                            <Text>Hangover </Text>
                            <Text>COMEDY </Text>
                            <Text>Hangover </Text>
                        </ListItem>
                        <ListItem>
                            <Text>COMEDY </Text>
                            <Text>Hangover </Text>
                            <Text>COMEDY </Text>
                            <Text>Hangover </Text>
                            <Text>COMEDY </Text>
                            <Text>Hangover </Text>
                        </ListItem>
                        <ListItem>
                            <Text>COMEDY </Text>
                            <Text>Hangover </Text>
                            <Text>COMEDY </Text>
                            <Text>Hangover </Text>
                            <Text>COMEDY </Text>
                            <Text>Hangover </Text>
                        </ListItem>
                        <ListItem>
                            <Text>COMEDY :</Text>
                            <Text>Hangover </Text>
                        </ListItem>
                        <ListItem>
                            <Text>COMEDY :</Text>
                            <Text>Hangover </Text>
                        </ListItem>
                        <ListItem>
                            <Text>COMEDY :</Text>
                            <Text>Hangover </Text>
                        </ListItem>
                        <ListItem>
                            <Text>COMEDY :</Text>
                            <Text>Hangover </Text>
                        </ListItem>
                        <ListItem>
                            <Text>COMEDY :</Text>
                            <Text>Hangover </Text>
                        </ListItem>
                        <ListItem>
                            <Text>COMEDY :</Text>
                            <Text>Hangover </Text>
                        </ListItem>
                        <ListItem>
                            <Text>COMEDY :</Text>
                            <Text>Hangover </Text>
                        </ListItem>
                        <ListItem>
                            <Text>COMEDY :</Text>
                            <Text>Hangover </Text>
                        </ListItem>
                        <ListItem>
                            <Text>COMEDY :</Text>
                            <Text>Hangover </Text>
                        </ListItem>
                        <ListItem>
                            <Text>COMEDY :</Text>
                            <Text>Hangover </Text>
                        </ListItem>
                        <ListItem>
                            <Text>COMEDY :</Text>
                            <Text>Hangover </Text>
                        </ListItem>
                        </List>
                    </ScrollView>
                    </ScrollView>
                </View>
            );
        }
    }
    
    export default Table;
    

    【讨论】:

    • 所以...好吃吗!?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-09
    • 1970-01-01
    • 1970-01-01
    • 2020-08-17
    • 2015-05-31
    • 2013-11-30
    • 1970-01-01
    相关资源
    最近更新 更多