从 UIWebView 迁移到 WKWebView 后性能显著下降



我正在从事的项目使用的是Xamarin Forms (3.4.0.x(跨平台,所以显然iOS应用程序内置了UIWebView。

我们决定迁移到WKWebView,这需要Xamarin Forms 4.4更新,所以我们继续这样做,然后在我们的iOS应用程序中向AssemblyInfo.cs添加了[assembly: ExportRenderer(typeof(WebView), typeof(Xamarin.Forms.Platform.iOS.WkWebViewRenderer))],就像它在这里所说的那样。 https://github.com/xamarin/Xamarin.Forms/pull/3346

现在我认为这就是我完全迁移到 WK 所需要做的就是,但我注意到该应用程序的速度显着变慢,加载页面需要 ~5 倍的时间,最重要的是,即使在页面加载完成后,此加载图标仍保留在屏幕上

我的问题是: 我是否正确迁移,或者我缺少/做错了任何步骤?以前有没有人遇到过这个加载图标问题?请让我澄清我是否遗漏了信息,我是 Xamarin Forms 的新手,所以我不确定如何提出最好的问题,这是我正在介绍的一个大项目。我被告知没有自定义的iOS WebView渲染器,所以一切都是使用默认的WebView完成的。

谢谢!

这是由于在网页上检测电话号码需要时间而导致的本机iOS问题。因此,如果您只是禁用该检测,它应该会更好地工作。

下面是如何在 Xamarin 中执行此操作的示例:

var urlRequest = new NSUrlRequest(new NSUrl("https://www.gooogle.com"));
var config = new WebKit.WKWebViewConfiguration();
config.DataDetectorTypes = WebKit.WKDataDetectorTypes.Address;
var frame = new CoreGraphics.CGRect();
var webView = new WebKit.WKWebView(frame, config);
webView.LoadRequest(urlRequest);

如果您点击了共享的链接,您应该能够将代码放入 WkWebViewRenderer 的 SetElement 函数中。所以你的代码看起来像这样:

var config = new WebKit.WKWebViewConfiguration();
config.DataDetectorTypes = WebKit.WKDataDetectorTypes.Address;
WebView = new WebKit.WKWebView(WebView.Frame, config);

Xamarin 团队刚刚公开了一个更简单的解决方案。您需要做的就是更新 Forms Nuget、Visual Studio 和 Xamarin.iOS,然后:

。转到您的 iOS 项目,打开项目属性,并在"其他 mtouch 参数"字段中添加此标志:--optimize=experimental-xforms-product-type。

最新更新