Objective-C实现React Native iOS自定义WebView提示UIManager找不到SecuredWebView如何解决
问题根因与修复方案
1. 原生组件导出名称与JS侧引用不匹配
你在SecuredWebViewManager.m中使用RCT_EXPORT_MODULE()默认导出的模块名为类名SecuredWebViewManager,但JS侧requireNativeComponent传入的组件名是SecuredWebView,二者不匹配导致找不到组件。
修复方案二选一:
- 方案1:修改原生导出语句,指定导出名称为
SecuredWebView
将SecuredWebViewManager.m中的RCT_EXPORT_MODULE()改为RCT_EXPORT_MODULE(SecuredWebView) - 方案2:修改JS侧引用名称,将
requireNativeComponent的第一个参数改为SecuredWebViewManager
2. 原生头文件导入错误
你当前导入的<React/RCTWebView.h>是React Native 0.60版本之前内置的旧版WebView头文件,目前WebView已经完全迁移到react-native-webview独立库中,旧的内置WebView已被移除,导入不存在的头文件会导致原生组件编译失败、无法注册。
修复方案:替换所有原生头文件导入
SecuredWebView.h中将#import <React/RCTWebView.h>改为#import <RNCWebView/RNCWebView.h>,同时父类从RCTWebView改为RNCWebViewSecuredWebViewManager.h中将#import <React/RCTWebViewManager.h>改为#import <RNCWebView/RNCWebViewManager.h>,同时父类从RCTWebViewManager改为RNCWebViewManager
3. JS侧缺失依赖导入
你的JS代码中使用了StyleSheet.create,但未从react-native中导入StyleSheet,会导致运行时报错。
修复方案:在JS侧import语句中加入StyleSheet导入:
import { NativeModules, requireNativeComponent, View, StyleSheet, // 新增该行 } from 'react-native';
4. 原生代码未编译生效
修改原生代码后需要重新执行以下操作才能生效:
- 进入iOS目录执行
pod install - 关闭当前运行的模拟器,重新在Xcode中编译运行项目,或者执行
npx react-native run-ios重新打包启动
全部修改完成后重新运行即可解决报错问题。
内容的提问来源于stack exchange,提问作者LeoTonic
相关产品推荐
相关产品推荐

