我有一个自定义 webview 渲染器来显示我从 API 调用下载的 PDF。我将 PDF 保存到本地存储并通过自定义 webview 渲染器显示它。它在模拟器上工作得很好,但是当我在真正的 iPad 上尝试时,页面只是显示空白(顶部的页面标题除外)。这是要显示的自定义渲染代码。
using MyProject.Core.Controls;
using MyProject.Core.Helpers;
using MyProject.Core.Services.FileStorage;
using MyProject.iOS.Renderers;
using Foundation;
using WebKit;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;
[assembly: ExportRenderer(typeof(PDFWebViewer), typeof(PDFWebViewerRenderer))]
namespace MyProject.iOS.Renderers
{
public class PDFWebViewerRenderer : ViewRenderer<PDFWebViewer, WKWebView>
{
PDFWebViewer WebViewer => Element as PDFWebViewer;
WKUserContentController userController;
protected async override void OnElementChanged(ElementChangedEventArgs<PDFWebViewer> e)
{
base.OnElementChanged(e);
if (Control == null)
{
userController = new WKUserContentController();
var config = new WKWebViewConfiguration { UserContentController = userController };
var webView = new WKWebView(Frame, config);
SetNativeControl(webView);
}
if (e.OldElement != null)
{
userController.RemoveAllUserScripts();
userController.Dispose();
var webViewer = e.OldElement as PDFWebViewer;
}
if (e.NewElement != null)
{
//var customWebView = Element as CustomWebView;
var filepath = await FileStorageService.FileExists(Constant.Agreement.AGREEMENT_PDF_PREVIEW);
if (!string.IsNullOrEmpty(filepath))
{
var request = new NSUrlRequest(new NSUrl($"file://" + filepath));
Control.LoadRequest(request);
}
}
}
}
}
在调试器中,我检查了这是文件路径/var/mobile/Containers/Data/Application/A9D74D50-7466-4F9E-8986-77F8305BD179/Documents/../Library/AGREEMENT_PREVIEW.pdf
这是它传递给的请求Control.LoadRequest(),
file:///var/mobile/Containers/Data/Application/A9D74D50-7466-4F9E-8986-77F8305BD179/Documents/../Library/AGREEMENT_PREVIEW.pdf