我有一个Xamarin.Forms应用程序,我们遇到了一个问题,用户位于呈现WKWebView的页面上,将会发生以下两种情况之一。该应用程序将崩溃,或者它们所在的网页仅呈现一半的内容。 scrollView看起来具有合适的内容高度,但在中间位置截断。
在搜索中,我发现:UIWebView/WKWebView crash on iOS11 (ran out of executable memory)
解决方案是设置一个环境变量以禁用JIT。如何禁用JIT?并非100%肯定会解决问题,但是值得尝试。
using System;
using Foundation;
using xxxxxxx.Controls;
using xxxxxxx.iOS.Renderers;
using WebKit;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;
[assembly: ExportRenderer (typeof(HybridWebView), typeof(HybridWebViewRenderer))]
namespace xxxxxxx.iOS.Renderers
{
public class HybridWebViewRenderer : ViewRenderer<HybridWebView, WKWebView>
{
public HybridWebViewRenderer() : base()
{
MessagingCenter.Subscribe<BrowserGoBackMessage>(this, BrowserGoBackMessage.Message, (obj) =>
{
if (Control.CanGoBack) Control.GoBack();
});
MessagingCenter.Subscribe<BrowserGoForwardMessage>(this, BrowserGoForwardMessage.Message, (obj) =>
{
if (Control.CanGoForward) Control.GoForward();
});
MessagingCenter.Subscribe<BrowserRefreshMessage>(this, BrowserRefreshMessage.Message, (obj) =>
{
Control?.Reload();
});
}
protected override void OnElementChanged(ElementChangedEventArgs<HybridWebView> e)
{
base.OnElementChanged(e);
if (Control == null)
{
var config = new WKWebViewConfiguration { };
var webView = new WKWebView(Frame, config) {AllowsBackForwardNavigationGestures = true};
SetNativeControl(webView);
}
if (e.OldElement != null){ }
if (e.NewElement != null)
{
if (Element.Uri != null)
{
Console.WriteLine("Changing = " + Element.Uri);
Control.LoadRequest(new NSUrlRequest(new NSUrl(Element.Uri)));
}
}
}
}
}