React Native KeyboardAwareScrollView: прокрутка до конца, когда клавиатура скрыта - PullRequest
0 голосов
/ 25 сентября 2019

У нас есть форма с небольшим количеством вводов. В настоящее время, когда пользователь щелкает последнее поле ввода, (a2a_memo_value) форма перемещается вверх, и клавиатура открывается, а когда ввод становится не в фокусе - клавиатура скрывается, но форма неперемещается вниз. Из-за того, что некоторые элементы не видны в представлении, пользователь должен прокрутить его вниз, чтобы просмотреть элемент.Я хочу прокрутить до конца, когда клавиатура скрывается, чтобы я мог видеть все элементы в форме.

Это мой компонент

 return (
                <Root>
                <KeyboardAwareScrollView >

                    <Container >                
                        <Content>                       
                            <Form testID="a2a_form" accessibilityLabel="a2a_form">
                                <View style={styles.item}>
                                    <Text note testID="a2a_xferType_label" accessibilityLabel="a2a_xferType_label">Transfer Type</Text>
                                    <Picker
                                        selectedValue={this.state.selectedTransferType}
                                        mode="dropdown"
                                        note="Transfer type note"
                                        placeholder="Transfer type note"
                                        testID="a2a_xferType"
                                        accessibilityLabel="a2a_xferType"
                                        iosHeader="Choose Transfer Type"
                                        iosIcon={<Icon name="arrow-down" />}
                                        style={{
                                            width: Platform.OS === "ios" ? undefined : Dimensions.get("window").width
                                        }}
                                        onValueChange={itemValue => this.handleTransferType(itemValue)}
                                    >
                                        {transferType.map((value, idx) => {
                                            return <Picker.Item key={idx} label={value} value={value} />;
                                        })}
                                    </Picker>
                                </View>
                                <View style={styles.item}>
                                    <Text note testID="a2a_fromAcct_label"
                                        accessibilityLabel="a2a_fromAcct_label">From Account</Text>

                                    <AccountsDropDown
                                        testID="a2a_fromAcct"
                                        accessibilityLabel="a2a_fromAcct"   
                                        selectedValue={this.state.fromAcct}
                                        accounts={this.state.xferSrcAccts}
                                        isFromAcct={true}
                                        navigation={this.props.navigation}
                                        onValueChange={itemValue => this.handleFromAcctSelection(itemValue)}
                                    />
                                </View>
                                <View style={styles.item}>
                                    <Text note testID="a2a_toAcct_label"
                                        accessibilityLabel="a2a_toAcct_label">To Account</Text>

                                    <AccountsDropDown
                                        testID="a2a_toAcct"
                                        accessibilityLabel="a2a_toAcct"     
                                        selectedValue={this.state.toAcct}
                                        isToAcct={true}
                                        skipAcct={this.state.fromAcct}
                                        accounts={this.state.xferDestAccts}
                                        navigation={this.props.navigation}
                                        onValueChange={itemValue => this.setState({ toAcct: itemValue })}
                                    />
                                </View>
                                <TouchableWithoutFeedback onPress={Keyboard.dismiss} accessible={false}>
                                <View style={{margin:10}}>
                                    <Text testID="a2a_amt_label" note
                                            accessibilityLabel="a2a_amt_label" >Amount</Text>
                                    <Item style={Platform.OS == "ios" ? {marginLeft:12} :undefined} >                                       
                                        <Input
                                            value={this.state.amount}
                                            testID="a2a_amt_value"                                                                              
                                            accessibilityLabel="a2a_amt_value"
                                            keyboardType="numeric"
                                            onChangeText={text => this.setState({ amount: text })}
                                        />
                                    </Item>
                                </View>
                                <View style={{margin:10}}>
                                    <Text testID="a2a_memo_label" note
                                        accessibilityLabel="a2a_memo_label" >Memo</Text>
                                    <Item  style={Platform.OS == "ios" ? {marginLeft:12} :undefined}>                                       
                                        <Input 
                                            testID="a2a_memo_value"                                         
                                            accessibilityLabel="a2a_memo_value"
                                            value={this.state.memoText.trim()}
                                            onChangeText={val => this.setState({ memoText: val })} />
                                    </Item> 
                                </View>
                                </TouchableWithoutFeedback>
                                <Button testID="a2a_next_btn"
                                            accessibilityLabel="a2a_next_btn" block style={styles.btn_save} onPress={this.validateXferForm}>
                                    <Text>Next</Text>
                                </Button>
                            </Form>

                        </Content>                      
                    </Container>                

                </KeyboardAwareScrollView>
                </Root>
            );

1 Ответ

0 голосов
/ 25 сентября 2019

Вы используете KeyboardAwareScrollView Правильно?

Тогда вам нужно определить атрибут resetSrollToCoords, потому что вы должны указать компоненту, какое положение по умолчанию вы оставили.

Итак, просто добавьте это:

<KeyboardAwareScrollView
  resetScrollToCoords={{ x: 0, y: 0 }}
  scrollEnabled={false}
>
...