Реакция-родной-webview избегать клавиатуры (iOS)
Реакция " native-native-webview " в моем опыте показала, что мне трудно вести себя так, как я хочу, с клавиатурой на iOS. Он не меняет свою высоту автоматически, когда отображается клавиатура, а ее содержимое скрывается клавиатурой.
Он также ведет себя странно, завернутый в KeyboardAvoidingView. В моем случае кажется, что он слишком сильно корректирует содержимое WebView, примерно вдвое больше высоты клавиатуры. Такое же поведение появилось, когда я вручную прослушал события открытия / закрытия клавиатуры и соответственно отрегулировал высоту WebView:
componentDidMount(){
Keyboard.addListener("keyboardWillShow", this.keyboardDidShow.bind(this));
Keyboard.addListener("keyboardWillHide", this.keyboardDidHide.bind(this));
}
componentWillUnmount(){
Keyboard.removeListener("keyboardWillShow", this.keyboardDidShow.bind(this));
Keyboard.removeListener("keyboardWillHide", this.keyboardDidHide.bind(this));
}
keyboardDidShow(event){
this.setState({
keyboardHeight: event.endCoordinates.height
});
}
keyboardDidHide(event){
this.setState({
keyboardHeight: 0
});
}
render(){
return (
<WebView
style={{flex: 1, maxHeight: Dimensions.get("window").height - this.state.keyboardHeight}}
/>
);
}
Я нашел решение, не оптимальное, но решение, тем не менее. Мой ответ выложен ниже.
1 ответ
Поскольку я не мог найти никаких обсуждений по этому конкретному поведению и никаких решений, которые работали бы для меня, я пробирался через подпорки к документам о реакции на родную сеть. В конечном итоге у меня сработало в версии 0.59.9 React Native и версии 5.11.0 React Native WebView, как описано выше, вручную установив высоту WebView в прослушивателях событий клавиатуры и установив реквизиты WebView useWebKit={false}
,
К сожалению, это означает, что на нативной стороне WebView теперь используется UIWebView
который устарел и будет удален в будущем.
В любом случае, это то, чем я занимаюсь, и просто хотел поделиться своими выводами на случай, если кто-то столкнется с той же проблемой.