Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xamarin 从UIWebView迁移到WKWebView后性能显著下降_Xamarin_Xamarin.forms_Xamarin.ios - Fatal编程技术网

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

Xamarin 从UIWebView迁移到WKWebView后性能显著下降,xamarin,xamarin.forms,xamarin.ios,Xamarin,Xamarin.forms,Xamarin.ios,我正在做的项目是使用Xamarin Forms(3.4.0.x)跨平台的,所以很明显iOS应用程序内置了UIWebView 我们决定迁移到WKWebView,这需要Xamarin Forms 4.4更新,因此我们继续这样做,然后将[assembly:ExportRenderer(typeof(WebView),typeof(Xamarin.Forms.Platform.iOS.WkWebViewRenderer))]添加到iOS应用程序中的AssemblyInfo.cs,就像这里说的那样 现在,

我正在做的项目是使用Xamarin Forms(3.4.0.x)跨平台的,所以很明显iOS应用程序内置了UIWebView

我们决定迁移到WKWebView,这需要Xamarin Forms 4.4更新,因此我们继续这样做,然后将
[assembly:ExportRenderer(typeof(WebView),typeof(Xamarin.Forms.Platform.iOS.WkWebViewRenderer))]
添加到iOS应用程序中的AssemblyInfo.cs,就像这里说的那样

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

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

谢谢

欢迎来到SO

这是一个本机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);

有一个更简单的解决方案刚从一开始就公开了。您只需更新表单Nuget、Visual Studio和Xamarin.iOS,然后:

。。。转到您的iOS项目,打开项目属性,并在附加mtouch参数字段中添加此标志:--optimize=experimental xforms产品类型


你好你是说检测网页上的电话号码需要多少时间?你的意思是像登录到应用程序的帐号一样吗?还有,我应该把代码放在哪里??在iOS应用程序的AssembyInfo.cs中?谢谢@chung表示,浏览器可能包含可以通过iOS自动超链接的电话号码,因此这需要很多时间。我更新了代码以与您的场景配合使用哦,好的,很抱歉,但是我应该将代码放在哪个文件中?我在整个项目中搜索了SetElement,但没有类似的函数。我要把它放在AssemblyInfo.cs中吗?还是我必须创建一个新文件?@chung我认为@Saamer建议您将
WkWebViewRenderer
子类化。您还需要将在
AssemblyInfo.cs
中指定的渲染器名称更改为子类的名称。如果你不熟悉子类化,你需要对它做更多的研究。嗯,那么如果我没有WkWebViewRenderer.cs,我就必须在我的项目中创建一个@马特斯文