React Native KeyboardAvoidingView covers last text input

后端 未结 4 928
遥遥无期
遥遥无期 2021-02-01 05:08

I\'m using React Native\'s Keyboard Avoiding View with the behavior set to padding (testing on Android).

I have multiple TextInputs on my screen. When I click the final

相关标签:
4条回答
  • 2021-02-01 05:44

    react-native-keyboard-aware-scroll-view

    I found it super simple to use and it worked great in both Android and iOS.

    It supports older versions of RN too.

    Initially I tried the KeyboardAvoidingView but on IOS not even

    behavior='position' with keyboardVerticalOffset worked properly.

    They used to overlap some content in a strange way.

    I have:

    RN 0.53.3
    react-native-keyboard-aware-scroll-view 0.6.0
    

    I added a few more details about my use case here:

    https://stackoverflow.com/a/51151496/1979861

    0 讨论(0)
  • 2021-02-01 05:50

    To add to @Maxwell's answer, sometimes you may need to scroll further than the end of the scroll view to get a component into view, since the added padding is not the full height of the keyboard. Full example below using scrollTo() with y offset as the height of the text input.

    import React, { Component } from 'react'
    import {
        KeyboardAvoidingView,
        ScrollView,
        View,
        TextInput
    } from 'react-native'
    
    
    export default class Test extends Component {
        render() {
            return (
                <ScrollView style = {{flex:1, backgroundColor: 'white'}} ref = 'scroll'>
                  <KeyboardAvoidingView behavior='position' style = {{backgroundColor: 'white', flex: 1}}>
                        <View style = {{height: 400}}/>
                        <TextInput style = {{height: 60}} placeholder='Example 1' />
                        <TextInput style = {{height: 60}} placeholder='Example 2' />
                        <TextInput style = {{height: 60}} placeholder='Example 3' />
                        <TextInput style = {{height: 60}} placeholder='Example 4' onFocus = {() => this.refs['scroll'].scrollTo({y: 60})}/>
                  </KeyboardAvoidingView>
                </ScrollView>
            )
        } 
    }
    
    0 讨论(0)
  • 2021-02-01 05:52

    Depending on platform, Android or IOS, implementation can be vary a little. This is how I did.

    Add android:windowSoftInputMode="adjustResize" at AndroidManifest.xml,

     <activity
        android:name=".MainActivity"
        android:launchMode="singleTask"
        android:label="@string/app_name"
        android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
        android:windowSoftInputMode="adjustResize">
    
     </activity>
    

    In your container

        <KeyboardAvoidingView
          behavior={Platform.OS === "ios" ? "padding" : null}
          keyboardVerticalOffset={Platform.OS === "ios" ? 64 : 0}>
          <ScrollView>
            {...}
          </ScrollView>
        </KeyboardAvoidingView>
    

    keyboardVerticalOffset tells how much the keyboard moves past the textInput.

    0 讨论(0)
  • 2021-02-01 05:59

    there is prop called keyboardVerticalOffset that you can pass to the KeyboardAvoidingView that will change how much the keyboard moves past the textInput. Sample of my code:

    const keyboardVerticalOffset = Platform.OS === 'ios' ? 40 : 0
    
        return (
          <KeyboardAvoidingView behavior='position' keyboardVerticalOffset={keyboardVerticalOffset}>
            <ListView .../>
          <KeyboardAvoidingView/>
        )
    
    0 讨论(0)
提交回复
热议问题