React Native: Scrollview работает неправильно - PullRequest
0 голосов
/ 29 января 2020

Я делаю страницу регистрации приложения с реактивным-родным, и потому что может быть маленький смартфон, поэтому я хочу дать клавиатуры AvoidingView и ScrollView. Если он настроен правильно, он должен выглядеть как на фото ниже:

enter image description here

Но когда я настроил scrollview, он выглядел как на фото ниже,

enter image description here

Итак, я пробовал разные вещи, но я не знаю, почему это так. Я думаю, что у него большая картинка, поэтому просмотр прокрутки не корректен.

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

Можете ли вы дать мне несколько советов по этой ситуации?

Код ниже,

index.tsx

render() {
    return (
        <KeyboardAvoidingView style={styles.container} behavior="padding">
            <ScrollView contentContainerStyle={{flexGrow: 1}}>
                { this.state.term
                    ? <Term />
                    : null
                }
                <View style={styles.imgContainer}>
                    <Image
                        source={require('../../../assets/test.png')}
                        style={styles.img}/>
                </View>
                <View style={styles.titleContainer}>
                    <Text style={styles.title}>샵치즈 회원가입</Text>
                </View>
                <View style={styles.inputBoxContainer}>
                    <TextInput
                        style={styles.inputBox} value={this.state.username}
                        placeholder="아이디" placeholderTextColor="rgb(152, 169, 188)"
                        onChangeText={(username)=>this.setState({username})}/>
                    <Text style={styles.describeText}>5~20자의 영문 소문자, 숫자만 사용 가능합니다.</Text>
                    <TextInput
                        style={styles.inputBox} value={this.state.password}
                        placeholder="비밀번호" placeholderTextColor="rgb(152, 169, 188)"
                        onChangeText={(password)=>this.setState({password})}/>
                    <Text style={styles.describeText}>8~16자 영문 대 소문자, 숫자, 특수문자만 사용 가능합니다.</Text>
                    <TextInput
                        style={styles.inputBox} value={this.state.phone}
                        placeholder="핸드폰 번호" placeholderTextColor="rgb(152, 169, 188)"
                        onChangeText={(phone)=>this.setState({phone})}/>
                </View>
                <View style={styles.termContainer}>
                    <TouchableOpacity onPressOut={this.checkedBox}>
                        { this.state.checked
                            ? <MaterialCommunityIcons 
                                size={20} name='checkbox-marked-circle-outline'/>
                            : <MaterialCommunityIcons 
                                size={20} name='checkbox-blank-circle-outline'/>
                        }  
                    </TouchableOpacity>
                    <TouchableOpacity onPress={() => {this.setState({term: true})}}>
                        <Text style={styles.termLink}>개인정보처리방침과 약관</Text>
                    </TouchableOpacity>
                    <Text>에 동의합니다.</Text>
                </View>
                <View style={styles.buttonBox}>
                    <TouchableHighlight 
                        style={styles.registButton}
                        onPress={() => this.props.navigation.navigate('AuthHome')}>
                        <Text style={styles.registText}>뒤로가기</Text>
                    </TouchableHighlight>
                    <TouchableHighlight
                        style={styles.loginButton}
                        onPress={this._signUp}>
                        <Text style={styles.loginText}>회원가입</Text>
                    </TouchableHighlight>
                </View>
                <View style={{flex:1}}/>
            </ScrollView>
        </KeyboardAvoidingView>
    );
}}

style.tsx

const styles = StyleSheet.create({
    container: {
      flexGrow:1, 
      justifyContent:"flex-end",
    },
    imgContainer: {
      width: "100%",
      height: "44%",
    },
    img: {
      width: "100%",
      height: "100%",
    },
    titleContainer: {
      alignItems: "center",
    },
    title: {
      fontSize: 20,
      fontWeight: "bold",
      marginTop: 22,
      marginBottom: 17,
    },
    inputBoxContainer: {
      width: "100%",
      paddingLeft: "4%",
      paddingRight: "4%",
    },
    inputBox: {
      backgroundColor: "rgb(248, 250, 251)",
      paddingTop: 11,
      paddingBottom: 11,
      paddingLeft: 16,
      marginBottom: 11,
    },
    describeText: {
      fontSize: 11,
      marginBottom: 11,
      marginLeft: 13,
    },
    termContainer: {
      flexDirection: "row",
      paddingLeft: "4%",
      marginTop: 10,
    },
    termLink: {
      color: "blue",
      textDecorationLine: "underline",
      marginLeft: 10,
    },
    buttonBox: {
      flexDirection: "row",
      justifyContent: "center",
      paddingTop: 20,
    },
    registButton: {
      backgroundColor: "rgb(242, 244, 246)",
      alignItems: "center",
      width: "42%",
      paddingTop: 11,
      paddingBottom: 11,
      borderRadius: 4,
    },
      registText: {
      color: "rgb(119, 140, 162)"
    },
      loginButton: {
      backgroundColor: "rgb(77, 124, 254)",
      alignItems: "center",
      width: "42%",
      paddingTop: 11,
      paddingBottom: 11,
      marginLeft: 20,
      borderRadius: 4,
    },
      loginText: {
      color: "rgb(255, 255, 255)"
    },
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...