React Native 避免视图收缩的键盘

btxsgosb  于 2023-03-24  发布在  React
关注(0)|答案(2)|浏览(148)

我希望我的页面能够向上滚动,这样用户就可以正确地输入其电子邮件和密码。因此,我使用了KeyboardAvoidingView。然而,当我使用它时,它缩小了我的文本输入picture,而不是向上移动页面。没有键盘,我的应用程序看起来像picture
此页面的代码如下:

export default class LoginScreen extends React.Component {
    constructor(props) {
        super(props)
    }
    state = {
        email: '',
        password: ''
    }
    handleEmail = (text) => {
        this.setState({ email: text })
    }
    handlePassword = (text) => {
        this.setState({ password: text })
    }

    render() {
        return (
            <View style={styles.container}>
                    <ImageBackground source={require('../pics/main.png')} style={styles.background}>
                    <KeyboardAvoidingView behavior="padding" style={{ flex: 1}} >

                        <Text style={styles.title2}>WELCOME</Text>
                        <TextInput
                            style={styles.inputEmail}
                            placeholder="Enter Email"
                            onChangeText={this.handleEmail}
                        />
                        <TextInput
                            style={[styles.inputEmail, styles.inputPassword]}
                            placeholder="Enter password"
                            onChangeText={this.handlePassword}
                        />
                        <View style={styles.buttons}>
                            <TouchableOpacity style={styles.login} onPress={() => this.props.navigation.navigate('MainScreen')} >
                                <Text style={styles.loginText}>LOGIN</Text>
                            </TouchableOpacity>
                            <TouchableOpacity
                                style={styles.login} onPress={() => this.props.navigation.navigate('SignUpScreen')}>
                                <Text style={styles.loginText}>SIGN UP</Text>
                            </TouchableOpacity>
                        </View>
                        </KeyboardAvoidingView>

                    </ImageBackground>

            </View>
        );
    }
}

const styles = StyleSheet.create({
    area: {
        flex: 1
    },
    container: {
        flex: 1,
    },
    background: {
        flex: 1,
        resizeMode: "cover",
        width: '100%',
        height: '100%'
    },
    title2: {
        paddingTop: 10,
        color: color.primary,
        fontSize: 25,
        alignSelf: 'center',
        justifyContent: 'flex-start'
    },
    inputEmail: {
        borderWidth: 2,
        borderColor: color.primary,
        borderRadius: 10,
        width: '50%',
        height: '5%',
        marginTop: 100,
        alignSelf: 'center',
        backgroundColor: color.secondary
    },
    inputPassword: {
        marginTop: 10
    },
    buttons: {
        flexDirection: 'row',
        justifyContent: 'space-around',
        marginTop: 30,
        marginLeft: 70,
        marginRight: 70,
    },
    login: {
        borderColor: color.primary,
        borderRadius: 20,
        borderWidth: 2,
        width: '40%',
        height: '118%',
        backgroundColor: color.primary
    },
    loginText: {
        alignSelf: 'center',
        marginTop: 5,
        marginBottom: 1,
        color: 'white'
    }
});

你知道我做错了什么吗?
更新:为了避免收缩,将文本输入容器的宽度和高度不作为百分比,而是作为真实的:inputEmail --〉width:200,高度:35,

xqk2d5yq

xqk2d5yq1#

这里是一个解决方案与您的代码,我已经固定在这个小吃与您提供的代码。
Expo Snack with CSS fixes to avoid keyboard

f3temu5u

f3temu5u2#

尝试添加一个名为keyboardVerticalOffset的 prop 。您可以将其设置为负值以使视图在键盘出现时向上移动更多,或者设置为正值以使其向下移动。
我做了实验,在-210的时候很完美

<KeyboardAvoidingView 
     behavior="height"
     keyboardVerticalOffset={-210}>
</KeyboardAvoidingView>

相关问题