Le problème avec le clavier ne se fermant pas devient plus grave si vous l'avez keyboardType='numeric', car il n'y a aucun moyen de le fermer.
Remplacer la vue par ScrollView n'est pas une solution correcte, comme si vous avez plusieurs textInputs ou buttons, taper dessus alors que le clavier est en place ne fera que fermer le clavier.
La bonne façon consiste à encapsuler View avec TouchableWithoutFeedbacket à appelerKeyboard.dismiss()
EDIT: Vous pouvez maintenant utiliser ScrollViewavec keyboardShouldPersistTaps='handled'pour ne fermer le clavier que lorsque le toucher n'est pas géré par les enfants (c'est-à-dire en tapant sur d'autres entrées de texte ou boutons)
Si tu as
<View style={{flex: 1}}>
<TextInput keyboardType='numeric'/>
</View>
Changez-le en
<ScrollView contentContainerStyle={{flexGrow: 1}}
keyboardShouldPersistTaps='handled'
>
<TextInput keyboardType='numeric'/>
</ScrollView>
ou
import {Keyboard} from 'react-native'
<TouchableWithoutFeedback onPress={Keyboard.dismiss} accessible={false}>
<View style={{flex: 1}}>
<TextInput keyboardType='numeric'/>
</View>
</TouchableWithoutFeedback>
EDIT: Vous pouvez également créer un composant d'ordre supérieur pour fermer le clavier.
import React from 'react';
import { TouchableWithoutFeedback, Keyboard, View } from 'react-native';
const DismissKeyboardHOC = (Comp) => {
return ({ children, ...props }) => (
<TouchableWithoutFeedback onPress={Keyboard.dismiss} accessible={false}>
<Comp {...props}>
{children}
</Comp>
</TouchableWithoutFeedback>
);
};
const DismissKeyboardView = DismissKeyboardHOC(View)
Utilisez-le simplement comme ceci
...
render() {
<DismissKeyboardView>
<TextInput keyboardType='numeric'/>
</DismissKeyboardView>
}
REMARQUE: le accessible={false}est requis pour que le formulaire de saisie reste accessible via VoiceOver. Les malvoyants vous remercieront!