키보드 회피 Scroll View를 사용한 표시 회피
네이티브 대응은 처음이지만 네이티브 대응 문서에서는 찾을 수 없었던 질문이 하나 있습니다.
이 컴포넌트를 조사하고 있습니다.KeyboardAvoidingView
: https://facebook.github.io/react-native/docs/keyboardavoidingview.html
질문은 간단합니다.문의할 사람이 있습니까?KeyboardAvoidingView
잘 어울리다ScrollView
나는 많은 것을 가지고 있다.TextInputs
1개의 컴포넌트(Text Inputs 높이의 합계가 디바이스 높이보다 크다)에서 키보드가 뜨면 여러 가지 문제가 발생합니다.
사용하는 경우View
대신ScrollView
그럼 다 괜찮은데, 기기 높이보다 공간이 더 필요해서 못 쓰겠어.스크롤에 대한 정보를 찾을 수 없습니다.KeyboardAvoidingView
문서를 참조해 주세요.
감사해요.
이것이 저의 솔루션입니다.포커스 입력 시 자동으로 동작하고 스크롤됩니다.엑스포 때 해봤어요.
<KeyboardAvoidingView style={{ flex: 1, flexDirection: 'column',justifyContent: 'center',}} behavior="padding" enabled keyboardVerticalOffset={100}>
<ScrollView>
<View style={Styles.row}>
//your view
</View>
</ScrollView>
</KeyboardAvoidingView>
나도 인터넷에서 해결책을 찾으려고 노력했지만, 스스로 알아냈어.나는 할 수 있었다.keyboardAvoidingView
함께 일하다ScrollView
아이폰 SE 시뮬레이터에 있습니다.
패딩 타입을 사용했습니다.position
,와 함께keyboardVerticalOffset
더 높은 값으로 설정합니다.나는 이것이 이 상황에 처한 모든 사람들에게 도움이 되기를 바란다.
render() {
return (
<View style={...}>
<ScrollView>
<KeyboardAvoidingView
style={{ flex: 1 }}
keyboardVerticalOffset={100}
behavior={"position"}
>
<TextInput style={styles.editInput} ... />
</KeyboardAvoidingView>
</ScrollView>
</View>
);
}
facebook은 아직 scrollViews 솔루션을 구현하지 않은 것 같습니다.하지만 Wix가 만든 솔루션, 즉 반응 네이티브 키보드 인식 스크롤 뷰는 정상적으로 동작합니다.
npm i react-native-keyboard-aware-scrollview --save
import { KeyboardAwareScrollView } from 'react-native-keyboard-aware-scrollview';
<KeyboardAwareScrollView style={styles.container}>
<TextInput style={styles.textInput} placeholder={'My Input'} />
</KeyboardAwareScrollView>
<View style={{flex:1}}>
<KeyboardAvoidingView
style={{flex:1}}
behavior={Platform.OS === 'ios' ? 'position' : null}
keyboardVerticalOffset={Platform.OS === 'ios' ? 50 : 70}
>
<ScrollView> // no need to put here style={{flex:1}}
<TextInput />
<TextInput />
<TextInput />
<TextInput />
</ScrollView>
</KeyboardAvoidingView>
</View>
제 경우 https://github.com/APSL/react-native-keyboard-aware-scroll-view을 사용했습니다.
<KeyboardAwareScrollView>
....
<MyContainerComponent>
....
<MyFormComponentWithInputs />
</MyContainerComponent>
</KeyboardAwareScrollView>
오래된 RN 버전도 지원합니다.
텍스트 입력은 ScrollView의 일부 커스텀 아이 컴포넌트 깊은 곳에 숨겨져 있었지만, 패키지는 Android와 iOS 모두에서 훌륭하게 동작했습니다.
아래 코드로 문제가 해결되었습니다.
<KeyboardAvoidingView
style={{ flex: 1, flexDirection: 'column',justifyContent: 'center'}}
behavior={Platform.OS == "ios" ? "padding" : "height"}
keyboardVerticalOffset={150}
enabled>
{renderForm()} // renderForm render the long form with ScrollView
</KeyboardAvoidingView>
나 또한 이 문제에 직면해 있었고, 이 문제를 해결하고 마지막으로 이 해결책을 찾기 위해 4시간 이상을 소비했다.
<KeyboardAvoidingView style={{ flex: 1, flexDirection: 'column',justifyContent: 'center'}} behavior="position" enabled keyboardVerticalOffset={200}>
<ScrollView>
<Text style={{padding:10,fontSize:42}}>Text 1</Text>
<Text style={{padding:10,fontSize:42}}>Text 2</Text>
<Text style={{padding:10,fontSize:42}}>Text 3</Text>
<Text style={{padding:10,fontSize:42}}>Text 4</Text>
<Text style={{padding:10,fontSize:42}}>Text 5</Text>
<Text style={{padding:10,fontSize:42}}>Text 6</Text>
<Text style={{padding:10,fontSize:42}}>Text 7</Text>
<Text style={{padding:10,fontSize:42}}>Text 8</Text>
<Text style={{padding:10,fontSize:42}}>Text 9</Text>
<Text style={{padding:10,fontSize:42}}>Text 10</Text>
<Text style={{padding:10,fontSize:42}}>Text 11</Text>
<Text style={{padding:10,fontSize:42}}>Text 12</Text>
<TextInput style={styles.input}
placeholder="Type some text...">
</TextInput>
</ScrollView>
</KeyboardAvoidingView>
수많은 시도 끝에 iOS와 Android 모두에서 잘 작동합니다.
<KeyboardAvoidingView
style={styles.keyboard}
behavior={Platform.OS == "ios" ? "padding" : "height"}
enabled
keyboardVerticalOffset={10}
>
<ScrollView>
...
</ScrollView>
</KeyboardAvoidingView>
스타일에 대해서:
const styles = StyleSheet.create({
keyboard: {
flex: 1,
flexDirection: 'column',
justifyContent: 'center',
}
});
같은 문제에 부딪혔습니다만, 기본적으로 키보드가 표시되었을 때 뷰의 위치를 계산하고(translateY를 사용하여) 배치하는 방법은 달랐습니다.
저는 Github과 NPM 반응-네이티브 스페이서에 용액을 게재했습니다.
나는 이틀 동안 적절한 해결책을 찾기 위해 노력했고 마침내 그것을 발견했다.
<KeyboardAvoidingView
style={{flex:1 }}
keyboardVerticalOffset={40 }
behavior={Platform.OS === "ios" ? "padding" : null}
>
<ScrollView >
….. .. . .
…
</ScrollView>
</KeyboardAvoidingView>
TextInput은 여러 줄의 TextInput에서는 동작하지 않기 때문에 특별히 주의를 기울이면 됩니다.그 때문에, 솔루션은 다음과 같습니다.
<TextInput
multiline={true}
scrollEnabled={false}
/>
이것이 당신에게 도움이 되고 당신의 시간을 절약하기를 바랍니다.
아이폰13 시뮬레이터, 안드로이드 픽셀2, 아이폰8 기기로 몇 시간을 보냈습니다.해결책은 다음과 같습니다.
<SafeAreaView style={{ flex: 1 }}>
<Button />
<Text />
<KeyboardAvoidingView behavior={Platform.OS === "ios" ? "padding" : null} keyboardVerticalOffset={50} style={{ flex: 1 }}>
<TouchableWithoutFeedback onPress={Keyboard.dismiss}>
<ScrollView>
<View style={{ flexDirection: "row", alignItems: "center" }}>
<Button />
</View>
<Text> </Text>
<View style={{ flexDirection: "row", alignItems: "center" }}>
<TextInput />
<TextInput />
<TextInput />
<TextInput />
</View>
<TextInput />
<View style={{ flexDirection: "row", alignItems: "center" }}>
<TextInput />
<TextInput />
<TextInput />
</View>
<TextInput />
</ScrollView>
</TouchableWithoutFeedback>
</KeyboardAvoidingView>
<Button />
</SafeAreaView>
또한.
키보드 수직 오프셋={100}
는 iOS 디바이스에서는 동작하지 않습니다.단추 위 스크롤 뷰 하단의 빈 뷰는 그대로 두기 때문에 Scroll View 내에서 버튼을 이동해도 도움이 되지 않습니다.
ios 플랫폼에서는 완벽한 동작이 아닙니다.KeyboardAwareScrollView 대신 KeyboardAwareScrollView를 사용합니다.
언급URL : https://stackoverflow.com/questions/40438986/keyboardavoidingview-with-scrollview
'programing' 카테고리의 다른 글
React-Router - Uncaught TypeError: 정의되지 않은 속성 'getCurrentLocation'을 읽을 수 없습니다. (0) | 2023.02.26 |
---|---|
PHP로 WordPress 플러그인에서 텍스트 파일로 쓰기 (0) | 2023.02.26 |
jQuery: 동기 AJAX 요청 수행 중 (0) | 2023.02.26 |
WordPress에서 게시 날짜를 얻으려면 어떻게 해야 합니까? (0) | 2023.02.26 |
JSON 문자열을 C# 객체로 변환 (0) | 2023.02.26 |