You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Expo React Native中隐藏WebView唤起的键盘导航栏

Expo React Native环境隐藏WebView唤起的键盘导航栏解决方案

方案1:全局配置(优先推荐)

直接修改Expo项目app.json/app.config.js的iOS端原生配置,可全局隐藏所有场景下的键盘导航栏,包含WebView内输入唤起的键盘:

{
  "expo": {
    "ios": {
      "hideKeyboardAccessoryView": true
    }
  }
}

修改完成后需重新执行expo prebuild并编译自定义开发客户端生效,Expo Go默认不支持该原生配置修改

方案2:适配react-native-keyboard-accessory组件

WebView内输入触发的键盘事件默认无法被RN层监听,需要额外添加WebView与RN的通信逻辑,手动控制导航组件的显隐和样式,修改后代码如下:

import { useState } from 'react';
import { View, Button } from 'react-native';
import WebView from 'react-native-webview';
import { KeyboardAccessoryNavigation } from 'react-native-keyboard-accessory';

const Page = () => {
  const [isWebViewInputFocus, setIsWebViewInputFocus] = useState(false);
  
  // 注入WebView的JS逻辑,监听输入框焦点事件
  const injectedJS = `
    document.addEventListener('focus', e => {
      if(['INPUT','TEXTAREA'].includes(e.target.tagName)) {
        window.ReactNativeWebView.postMessage('KEYBOARD_OPEN');
      }
    }, true);
    document.addEventListener('blur', e => {
      if(['INPUT','TEXTAREA'].includes(e.target.tagName)) {
        window.ReactNativeWebView.postMessage('KEYBOARD_CLOSE');
      }
    }, true);
    true;
  `;

  const handleMessage = e => {
    const msg = e.nativeEvent.data;
    if(msg === 'KEYBOARD_OPEN') setIsWebViewInputFocus(true);
    if(msg === 'KEYBOARD_CLOSE') setIsWebViewInputFocus(false);
  };

  return (
    <View style={styles.container}>
        <View style={styles.contentContainer}>
            <Button onPress={checkButton} title="hee"></Button>

            <WebView
                ref={webView}
                javaScriptEnabled={true}
                source={{ uri: 'http://192.168.1.35:3000' }}
                injectedJavaScript={injectedJS}
                onMessage={handleMessage}
                // Android端补充配置
                androidLayerType="hardware"
                androidKeyboardDisplayMode="adjustResize"
            />

            {isWebViewInputFocus && (
              <KeyboardAccessoryNavigation
                  doneHidden={true}
                  nextHidden={true}
                  previousHidden={true}
                  hideBorder={true}
                  style={{ height: 0, opacity: 0, display: 'none' }}
              />
            )}
        </View>
    </View>
  )
}

内容的提问来源于stack exchange,提问作者Roman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 03:48:01