Xamarin Forms iOS WebView本地文件路径配置求助
iOS端Xamarin Forms WebView加载本地HTML空白的解决方案
1. 先把文件位置和Build Action搞对
- 别同时在iOS项目根目录和Resources文件夹放
GettingStartedWizardWebPage,直接把整个文件夹丢iOS项目根目录就行 - 选中文件夹里所有文件(html、css、js这些),右键设Build Action为BundleResource,复制选项选
如果较新则复制
2. 修正iOS的URL路径写法
iOS不认///前缀,两种解决方式:
方式一:后台代码动态获取路径(推荐,不容易错)
给XAML里的WebView加个x:Name="LocalWebView",然后在页面的.cs文件里写:
protected override void OnAppearing() { base.OnAppearing(); if (Device.RuntimePlatform == Device.iOS) { var bundlePath = NSBundle.MainBundle.BundlePath; var fullPath = Path.Combine(bundlePath, "GettingStartedWizardWebPage", "WebPage.html"); LocalWebView.Source = new UrlWebViewSource { Url = new Uri(fullPath).AbsoluteUri }; } }
方式二:直接改XAML里的路径
不用前缀,直接写相对路径就行:
<On Platform="iOS" Value="GettingStartedWizardWebPage/WebPage.html" />
或者用file://前缀(注意是两个斜杠):
<On Platform="iOS" Value="file://GettingStartedWizardWebPage/WebPage.html" />
3. 换成WKWebView替代旧的UIWebView
苹果早就弃用UIWebView了,Xamarin Forms默认可能还在使用,换成WKWebView能解决不少兼容性问题:
- 打开iOS项目的
Info.plist,加这段配置:
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict> <key>WKWebViewConfiguration</key> <dict/>
- 或者在
AppDelegate.cs的FinishedLaunching方法里加一行:
global::Xamarin.Forms.Forms.SetFlags("WebView_WKWebView");
要放在Forms.Init()之后,LoadApplication(new App())之前。
4. 排查几个容易踩的坑
- 检查HTML文件有没有语法错误:iOS的WebView对语法要求更严,比如标签没闭合、JS报错都可能导致空白
- 真机部署时,看看VS的输出日志,确认文件有没有被正常打包到设备上
- 别用中文文件名或路径,容易出现编码问题
内容的提问来源于stack exchange,提问作者Charles
相关产品推荐
相关产品推荐

