Warm tip: This article is reproduced from stackoverflow.com, please click
ios react-native react-native-maps

KeyboardAvoidingView keeps adjusting height

发布于 2020-03-27 10:32:00

The KeyboardAvoidingView keeps adjusting its height when used together with a map. Everything works fine when the KeyboardAvoidingView is disabled.

  • I've tested different behavior options, but non of them fixes the issue
  • It's only a problem on iOS when using the Google Maps provider

Video: https://www.dropbox.com/s/f8tix2gqmqz7i0i/height_bug.mov?dl=0

Small part of the structure:

<View style={ styles.container }>
    <MapView style={ styles.map } provider="google">
        { markers }
    <KeyboardAvoidingView behavior="padding" keyboardVerticalOffset={ 90 }>
        <View style={ styles.footer }>
            <SafeAreaView>
                { toolbar }
            </SafeAreaView>
        </View>
    </KeyboardAvoidingView>
</View>

Styling that could be relevant:

const styles = StyleSheet.create({
    container: {
        flex: 1
    },
    map: {
        flex: 1
    },
    footer: {
        backgroundColor: colors.WHITE
    },
    footerToolbar: {
        flexDirection: 'row',
        padding: sizes.SCREEN_MARGIN / 2
    }
})

React native info:

info 
  React Native Environment Info:
    System:
      OS: macOS 10.14.5
      CPU: (8) x64 Intel(R) Core(TM) i7-8559U CPU @ 2.70GHz
      Memory: 1.58 GB / 16.00 GB
      Shell: 3.2.57 - /bin/bash
    Binaries:
      Node: 10.15.3 - /usr/local/bin/node
      Yarn: 1.15.2 - /usr/local/bin/yarn
      npm: 6.9.0 - /usr/local/bin/npm
      Watchman: 4.9.0 - /usr/local/bin/watchman
    SDKs:
      iOS SDK:
        Platforms: iOS 12.2, macOS 10.14, tvOS 12.2, watchOS 5.2
    IDEs:
      Xcode: 10.2.1/10E1001 - /usr/bin/xcodebuild
    npmPackages:
      react: 16.8.6 => 16.8.6 
      react-native: https://github.com/expo/react-native/archive/sdk-33.0.0.tar.gz => 0.59.8 
    npmGlobalPackages:
      react-native-cli: 2.0.1
Questioner
tobi
Viewed
144
Kyle Erickson 2019-07-04 05:52

Try wrapping your whole component in your container with KeyboardAvoidingView. This component is basically just a View with padding on the bottom. Also, if you're going to use SafeAreaView it may be better placed on an outer component, as it's used to provide spacing on iOS for the outer view to ensure it clears the edges for iOS devices with notches and no buttons.