Высота веб-страницы корректно отображается с помощью WebViewRenderer, но не с ViewRenderer - PullRequest
0 голосов
/ 21 марта 2019

Между стандартным значением WebViewRenderer и моим пользовательским ViewRenderer есть нечто иное, и я должен выяснить, почему. По сути, веб-страница не отображается, если я использую свой пользовательский ViewRenderer.

ViewRenderer имеет некоторые проблемы с height: 100%; и неправильно интерпретирует этот CSS. В результате высота составляет 0px, несмотря на то, что она должна использовать полную высоту. С другой стороны, он работает с точными размерами (например, 400 пикселей).

Код для 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, и, поскольку процесс рендеринга происходит в фоновом режиме, он в то же время имеет высоту нуля.

1 Ответ

0 голосов
/ 27 марта 2019

Я не знаю почему, но это решает проблему для меня:

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

Если у кого-то есть подсказка, пожалуйста, прокомментируйте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...