反応ネイティブのTextInputコンポーネントを使用しています。ここで、ユーザーがtextInputフィールドをクリックした場合にキーボードの上にInputBoxを表示する必要があります。
以下を試しましたが、問題に直面しています
1。キーボード回避ビュー
a. Here it shows some empty space below the input box
b. Manually I need to scroll up the screen to see the input field which I was given in the text field
c. Input box section is hiding while placing the mouse inside the input box
2。 react-native-Keyboard-aware-scroll-view
a.It shows some empty space below the input box
b.ScrollView is reset to the top of the page after I moving to the next input box
ここでは、ScrollViewコンポーネント内にKeyboard-aware-scroll-viewを設定します
親切に明確にする
私のサンプルコードは
<SafeAreaView>
<KeyboardAvoidingView>
<ScrollView>
<Text>Name</Text>
<AutoTags
//required
suggestions={this.state.suggestedName}
handleAddition={this.handleAddition}
handleDelete={this.handleDelete}
multiline={true}
placeholder="TYPE IN"
blurOnSubmit={true}
style= {styles.style}
/>
</ScrollView>
</KeyboardAvoidingView>
</SafeAreaView>
[ https://github.com/APSL/react-native-keyboard-aware-scroll-view]
次のように KeyboardAvoidingView を使用できます
_if (Platform.OS === 'ios') {
return <KeyboardAvoidingView behavior="padding">
{this.renderChatInputSection()}
</KeyboardAvoidingView>
} else {
return this.renderChatInputSection()
}
_
this.renderChatInputSection()
は、メッセージを入力するためのtextinputのようなビューを返します。これがお役に立てば幸いです。
@basbaseソリューションのソリューションをベースにしています。
TextInputが私の全体的なビューに関係なくジャンプするという彼の解決策に関する私の問題。
私の場合、それは私が望んでいたものではなかったので、彼の提案どおりに行いましたが、少し変更を加えました
親ビューに次のようなスタイルを与えるだけです。
<View
style={{
flex: 1,
bottom: keyboardOffset,
}}>
そしてそれはうまくいくでしょう!唯一の問題は、キーボードが開いているときに下にスクロールすると、画面の最後に余分な空白が表示されることです。
サイドプロジェクトで作業しているときに同じ問題に直面し、KeyboardAvoidingViewを少し調整した後で解決しました。私は my solution をnpmに公開しました。試してフィードバックを送ってください! iOSのデモ
スニペットの例
import React from 'react';
import { StyleSheet, TextInput } from 'react-native';
import KeyboardStickyView from 'rn-keyboard-sticky-view';
const KeyboardInput = (props) => {
const [value, setValue] = React.useState('');
return (
<KeyboardStickyView style={styles.keyboardView}>
<TextInput
value={value}
onChangeText={setValue}
onSubmitEditing={() => alert(value)}
placeholder="Write something..."
style={styles.input}
/>
</KeyboardStickyView>
);
}
const styles = StyleSheet.create({
keyboardView: { ... },
input: { ... }
});
export default KeyboardInput;
Androidの場合、Android:windowSoftInputMode="adjustResize"
for Activity
in AndroidManifest
file、したがって、キーボードが表示されると、画面のサイズが変更され、TextInput
を画面の下部に配置すると、画面が維持されますキーボードの上
フックのバージョン:
const [keyboardOffset, setKeyboardOffset] = useState(0);
const onKeyboardShow = event => setKeyboardOffset(event.endCoordinates.height);
const onKeyboardHide = () => setKeyboardOffset(0);
const keyboardDidShowListener = useRef();
const keyboardDidHideListener = useRef();
useEffect(() => {
keyboardDidShowListener.current = Keyboard.addListener('keyboardWillShow', onKeyboardShow);
keyboardDidHideListener.current = Keyboard.addListener('keyboardWillHide', onKeyboardHide);
return () => {
keyboardDidShowListener.current.remove();
keyboardDidHideListener.current.remove();
};
}, []);
これは間違いなく便利です
追加する必要がある理由は本当にわかりません
"androidStatusBar":{"backgroundColor": "#000000"}
keyboardawareScrollviewが機能するため
注:最後の手順なしでプロジェクトを再起動することを忘れないでください。うまく動作しない可能性があります!
react-native-keyboard-aware-scroll-viewはiosで同様の問題を引き起こしました。そのとき、私は react-native-keyboard-aware-view に出くわしました。スニペットはほとんど同じです。
<KeyboardAwareView animated={true}>
<View style={{flex: 1}}>
<ScrollView style={{flex: 1}}>
<Text style={{fontSize: 20, color: '#FFFFFF'}}>A</Text>
<Text style={{fontSize: 20, color: '#FFFFFF'}}>B</Text>
<Text style={{fontSize: 20, color: '#FFFFFF'}}>C</Text>
<Text style={{fontSize: 20, color: '#FFFFFF'}}>D</Text>
</ScrollView>
</View>
<TouchableOpacity style={{height: 50, backgroundColor: 'transparent', alignItems: 'center', justifyContent: 'center', alignSelf: 'stretch'}}>
<Text style={{fontSize: 20, color: '#FFFFFF'}}>Submit</Text>
</TouchableOpacity>
</KeyboardAwareView>
それがhepls願っています