대안1
import { Keyboard } from 'react-native';
<TouchableWithoutFeedback onPress={Keyboard.dismiss} accessible={false}>
<KeyboardAvoidingView {...props} behavior={'position'} style={props.style}>
{children}
</KeyboardAvoidingView>
</TouchableWithoutFeedback>
TouchableWithoutFeedback
TouchableWithoutFeedback
화면 클릭시 onPress={ Keyboard.dismiss }
가 호출되고 Keyboard.dismiss
로 인해 키보드가 화면 아래로 내려간다.
화면 우선순위로 만들어 주어야 한다.(z-index)
accessible
은 웹 접근성에 따라 버튼이 화면에 존재하면 스크린리더기가 버튼 존재에 대한 내용을 설명 하는데 사실 TouchableWithoutFeedback
이 컴포넌트는 버튼의 기능이 아닌 TextInput 외 화면 클릭시 키보드를 화면에서 내려주는 기능으로 만들어 놓았기 때문에 장애인들에게는 버튼으로서는 불필요한 기능이며 알 필요가 없는 내용이다. 그래서 스크린리더기에게 버튼의 기능으로서 쓸모없는 것이다 라고 인식시켜주는 옵션속성이다.
KeyboardAvoidingView
behavior
속성의 'position' 기능은 주로 안드로이드에서 잘 먹히고 'padding'는 주로 ios에서 잘 먹힌다. 그래서 사용시 안드로이드에서는 'position'을 사용하고 ios에서는 'padding'를 사용 하도록 분기 처리를 해줘야 한다.안드로이드 에서는 기본 제공하지만 리액트 네이티브에서는 직접 구현 해줘야 하는 부분으로
대안2
적극권장
KeyboardAvoidingView을 사용할때 단점들을 모두 커버해주는 라이브러리
import {KeyboardAwareScrollView} from 'react-native-keyboard-aware-scroll-view';
<TouchableWithoutFeedback onPress={Keyboard.dismiss} accessible={false}>
<KeyboardAwareScrollView {...props} style={props.style}>
{children}
</KeyboardAwareScrollView>
</TouchableWithoutFeedback>
https://www.npmjs.com/package/react-native-keyboard-aware-scroll-view