Xamarin.forms 如何在跨平台移动应用程序项目(VS 2017/Xamarin)中实现WkWebView?

Xamarin.forms 如何在跨平台移动应用程序项目(VS 2017/Xamarin)中实现WkWebView?,xamarin.forms,xamarin.ios,Xamarin.forms,Xamarin.ios,我有一个跨平台的移动应用程序(Android/iOS),它实现了通用的WebView控件。这在大多数情况下都很有效,但一些iOS用户抱怨,当试图加载某个资源密集型网页时,应用程序“变黑”,然后焦点返回主菜单视图。我的怀疑是,由于网页的内容量和处理开销太大,应用程序可能会阻塞,但坦率地说,这是一个盲目的猜测,我没有足够的资源(如iPhone)来验证这一点。在Mac电脑上使用iPhone模拟器不会再现“黑屏”问题 因此,我正在尝试在8.0版及以上版本的iOS设备上并行实现WkWebView,因为这可

我有一个跨平台的移动应用程序(Android/iOS),它实现了通用的WebView控件。这在大多数情况下都很有效,但一些iOS用户抱怨,当试图加载某个资源密集型网页时,应用程序“变黑”,然后焦点返回主菜单视图。我的怀疑是,由于网页的内容量和处理开销太大,应用程序可能会阻塞,但坦率地说,这是一个盲目的猜测,我没有足够的资源(如iPhone)来验证这一点。在Mac电脑上使用iPhone模拟器不会再现“黑屏”问题

因此,我正在尝试在8.0版及以上版本的iOS设备上并行实现WkWebView,因为这可能会提高性能,并可能缓解问题。这只是为了工作,但ViewController和ContentPage之间似乎出现了断开连接,而ContentPage本应承载WkWebView控件,但我一直无法纠正

以下是一般实施情况:

[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class WkWebViewPage : ContentPage
{
    public WkWebViewPage (string url, string title)
    {
        InitializeComponent();

        Title = title;

        App.GetWkWebView(this, url);
    }
}
WkWebPageView的标记没有内部内容

方法App.GetWkWebView是Action类型的委托,在主应用程序类中作为静态属性实现。这在AppDelegate类(iOS项目)的FinishedLaunching方法中分配给我用来管理调用WkWebView的静态类中的静态方法。此类的实现如下所示:

public static class WkWebViewController
{
    private static WKWebView _wkWebView;

    public static void GetWkWebView(Page parentView, string url)
    {
        if(_wkWebView == null)
        {

    // INSERT ATTEMPTED APPROACHES BELOW HERE

            var frame = view.Frame;

            var cgRect = new CoreGraphics.CGRect(frame.X, frame.Y, frame.Width, frame.Height);

            _wkWebView = new WKWebView(cgRect, new WKWebViewConfiguration());

            view.AddSubview(_wkWebView);

    // NavigationDelegate is a custom class; not germane to the issue
            _wkWebView.NavigationDelegate = new NavigationDelegate();
        }

        var nsUrl = new NSUrl(url);
        var request = new NSUrlRequest(nsUrl);

        _wkWebView.LoadRequest(request);
    }
}
麻烦就从这里开始。我尝试了两种方法来获得适当的ViewController——更确切地说,是UIView对象:

(一)

其结果如下:


(来源:)

内容区域为白色/空白。http请求在收到200响应时成功提交。请注意,内容区域上方的导航栏会正确显示

(二)

其结果是:


(来源:)

在这种情况下,网页显示:;但是,WkWebView控件占据了整个屏幕,模糊了导航栏(以及状态栏)

如有任何建议,将不胜感激

var renderer = Platform.GetRenderer(parentView);

if (renderer == null)
{
    renderer = Platform.CreateRenderer(parentView);
    Platform.SetRenderer(parentView, renderer);
}

var view = renderer.ViewController.View;
var window = UIApplication.SharedApplication.KeyWindow;

var vc = window.RootViewController;

while (vc.PresentedViewController != null)
{
    vc = vc.PresentedViewController;
}

var view = vc.View;