Xamarin表单,PDF在iOS模拟器上显示,但在真正的iPad上不显示

Xamarin表单,PDF在iOS模拟器上显示,但在真正的iPad上不显示,xamarin,xamarin.forms,xamarin.ios,wkwebview,Xamarin,Xamarin.forms,Xamarin.ios,Wkwebview,我有一个自定义webview渲染器来显示从API调用下载的PDF。我将PDF保存到本地存储,并通过自定义webview渲染器显示它。它在模拟器上运行得非常好,但当我在真正的iPad上试用时,页面显示为空白(顶部的页面标题除外)。 这是要显示的自定义渲染代码 using MyProject.Core.Controls; using MyProject.Core.Helpers; using MyProject.Core.Services.FileStorage; using MyProject.i

我有一个自定义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);
                }
            }
        }
    }
}
使用MyProject.Core.Controls;
使用MyProject.Core.Helpers;
使用MyProject.Core.Services.FileStorage;
使用MyProject.iOS.Renderers;
使用基础;
使用WebKit;
使用Xamarin.Forms;
使用Xamarin.Forms.Platform.iOS;
[程序集:ExportRenderer(typeof(PDFWebViewer)、typeof(PDFWebViewerRenderer))]
命名空间MyProject.iOS.Renderers
{
公共类PDFWebViewerRenderer:ViewRenderer
{
PDFWebViewer=>元素作为PDFWebViewer;
WKUserContentController用户控制器;
受保护的异步重写void OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
if(Control==null)
{
userController=新的WKUserContentController();
var config=new WKWebViewConfiguration{UserContentController=userController};
var webView=新的WKWebView(框架,配置);
SetNativeControl(网络视图);
}
if(e.OldElement!=null)
{
userController.RemoveAllUserScripts();
userController.Dispose();
var webViewer=e.OldElement作为PDFWebViewer;
}
if(例如NewElement!=null)
{
//var customWebView=作为customWebView的元素;
var filepath=await FileStorageService.FileExists(Constant.Agreement.Agreement\u PDF\u PREVIEW);
如果(!string.IsNullOrEmpty(文件路径))
{
var-request=new-NSUrlRequest(new-NSUrl($“文件:/”+filepath));
控制。加载请求(请求);
}
}
}
}
}
在调试器中,我选中了,这是文件路径
/var/mobile/Containers/Data/Application/A9D74D50-7466-4F9E-8986-77F8305BD179/Documents/./Library/AGREEMENT_PREVIEW.pdf

这是它正在传递给
控件的请求。LoadRequest()

file:///var/mobile/Containers/Data/Application/A9D74D50-7466-4F9E-8986-77F8305BD179/Documents/../Library/AGREEMENT_PREVIEW.pdf

找到了解决方案。由于某些原因,真正的设备不喜欢
Control.LoadRequest(请求)

对我有效的是

var request = new NSUrl($"file://" + filepath);
Control.LoadFileUrl(request, request);

希望这对将来的人有帮助

非常感谢你!你节省了我的时间!:)