Реакция-родной-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 который устарел и будет удален в будущем.

В любом случае, это то, чем я занимаюсь, и просто хотел поделиться своими выводами на случай, если кто-то столкнется с той же проблемой.

Другие вопросы по тегам