【问题标题】:WKWebView wont show doc, docx, png, txt under iOS 12 in XamarinWKWebView 在 Xamarin 的 iOS 12 下不会显示 doc、docx、png、txt
【发布时间】:2020-09-21 21:44:21
【问题描述】:

我已经从 UIWebView 更新到 WKWebView。它在 iOS 13.4.1(模拟器和 iPad)下和模拟器中的 iOS 12.4.7 下工作,但 WKWebView 在真正的 iPad 上保持白色。

        WKWebViewConfiguration webConfiguration = new WKWebViewConfiguration();
        webConfiguration.Preferences.JavaScriptEnabled = false;
        WKWebView wkWebView = new WKWebView(Bounds, webConfiguration);
        SetNativeControl(wkWebView);

        wkWebView.LoadRequest(new NSUrlRequest(new NSUrl(localDocUrl, false)));
        wkWebView.AutoresizingMask = UIViewAutoresizing.FlexibleDimensions;

有什么想法吗?

【问题讨论】:

  • 为什么不使用默认的WkWebViewRenderer?一切都在那里设置好了,你不需要自己SetNativeControl
  • @MihailDuchev var webConfiguration = new WKWebViewConfiguration(); webConfiguration.Preferences.JavaScriptEnabled = false; WkWebViewRenderer webViewRenderer = new WkWebViewRenderer(webConfiguration); webViewRenderer.LoadRequest(new NSUrlRequest(new NSUrl(localDocUrl, false))); webViewRenderer.AutoresizingMask = UIViewAutoresizing.FlexibleDimensions;像这样?

标签: ios xamarin ipad uiwebview wkwebview


【解决方案1】:

从最近开始,UIWebView 及其渲染器已被弃用。最好使用WkWebViewRenderer。它应该包含您可能需要的一切,以便开箱即用地打开这些类型的文件。如果您需要进一步自定义它,您可以简单地在其 OnElementChanged 覆盖中进行:

public class MyCustomWebView : WkWebViewRenderer 
{
    protected override void OnElementChanged(VisualElementChangedEventArgs e)
    {
        base.OnElementChanged(e);
        // Customise it here
    }
}

这样您就不需要手动构造和初始化WkWebView 并将其添加为使用SetNativeControl() 方法的本机控件。一切都内置在这个渲染器中。

注意:请记住,如果您使用的是最新的 Xamarin.Forms 版本,则默认情况下 WebView 继承自 WkWebViewRenderer,因此您无需显式更改它。您需要继承 WkWebViewRenderer,仅当您需要添加未在 Forms 中公开的其他配置时。

【讨论】:

  • 你能给我一个代码示例吗?
  • 如果您只是想打开此类扩展而不进行任何其他修改,请将您的 Xamarin 更新到最新版本(您现在使用的是哪个版本?)并删除您的 WebView 渲染器文件。跨度>
  • 4.3.0.908675,但我可以使用 4.6.0.800。两者似乎都不起作用。
  • 抛开您的问题,您需要更新到最新的表单(并删除 WebView 渲染器),因为 Apple 已弃用 UIWebView,您将无法上传您的应用程序,因为旧版本的 Xamarin.Forms 仍然引用它。回到您的问题 - 您如何加载共享项目中的文件?
  • 'LoadFileUrl(new NSUrl(localDocUrl, false), new NSUrl(localDocUrl, false))' 成功了,但感谢您的努力
【解决方案2】:

我找到了解决办法

WKWebViewConfiguration webConfiguration = new WKWebViewConfiguration();
webConfiguration.Preferences.JavaScriptEnabled = false;
WKWebView wkWebView = new WKWebView(Bounds, webConfiguration);
SetNativeControl(wkWebView);

wkWebView.LoadFileUrl(new NSUrl(localDocUrl, false), new NSUrl(localDocUrl, false));
wkWebView.AutoresizingMask = UIViewAutoresizing.FlexibleDimensions;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-17
    • 1970-01-01
    • 1970-01-01
    • 2018-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多