使用 WebViewRenderer 正确呈现的网页高度,但使用 ViewRenderer 无法正确呈现<HybridWebView, Android.Webkit.WebView>

Web page height correctly rendered with WebViewRenderer, but not with ViewRenderer<HybridWebView, Android.Webkit.WebView>

默认 WebViewRenderer 和我的自定义 ViewRenderer 之间有些不同,我必须找出原因。基本上,如果我使用自定义 ViewRenderer.

,则网页不会显示

ViewRendererheight: 100%; 有一些问题并且解释这个 CSS 是错误的。结果高度为 0px,尽管它应该使用全高。另一方面,它适用于精确尺寸(例如 400px)。

WebViewRenderer的代码:

<local:CustomWebView x:Name="webView"
     Source="http://somesite"
     HorizontalOptions="FillAndExpand"
     VerticalOptions="FillAndExpand"
     HeightRequest="1000"
     WidthRequest="1000"/>
public class CustomWebView : WebView
{
}

public class CustomWebViewRenderer : WebViewRenderer
{
    public CustomWebViewRenderer(Context context) : base(context)
    {

    }
}

ViewRenderer的代码:

<local:HybridWebView x:Name="webView"
                     HorizontalOptions="FillAndExpand"
                     VerticalOptions="FillAndExpand"
                     HeightRequest="1000"
                     WidthRequest="1000"/>
public class HybridWebView : View
{
}

public class HybridWebViewRenderer : ViewRenderer<HybridWebView, Android.Webkit.WebView>
{
    private Context context;

    public HybridWebViewRenderer(Context context) : base(context)
    {
        this.context = context;
    }

    protected override void OnElementChanged(ElementChangedEventArgs<HybridWebView> e)
    {
        base.OnElementChanged(e);

        if (Control == null)
        {
            var webView = new Android.Webkit.WebView(this.context);
            webView.Settings.JavaScriptEnabled = true;
            webView.SetWebViewClient(new CustomWebViewClient());
            SetNativeControl(webView);
        }

        if (e.OldElement != null)
        {
        }

        if (e.NewElement != null)
        {
            Control.LoadUrl("http://somesite");
        }
    }
}

public class CustomWebViewClient : WebViewClient
{

}

一个假设是响应式网站适应其 WebView 大小,并且由于渲染过程在后台进行,此时它的高度不知何故为零。

我不知道为什么,但是 为我解决了这个问题:

webView.LayoutParameters = new LinearLayout.LayoutParams(LayoutParams.MatchParent, LayoutParams.MatchParent);

有知道的请留言。