Xamarin Forms中WebView的自适应高度

  • 时间:
  • 浏览:1
  • 来源:3分时时彩官网_哪里可以玩3分时时彩_3分时时彩在哪里玩

Xamarin Forms中WebView的自适应深层

2018-03-20 12:08  JoesWeek  阅读(...)  评论()  编辑 收藏

在Xamarin.Forms中,WebView已经 嵌套在StackLayout和RelativeLayout中都还都还可以要设置HeightRequest和WidthRequest属性才会进行渲染。本来我在实际项目中往往WebView内容是不固定的,就造成了设置了HeightRequest和WidthRequest后显示效果不理想,全是高了本来我短了,很影响用户体验,不都还都还可以就都还都还可以要自适应网页的深层才行。

首先在共享库中的加进去去XamWebView类:

public class XamWebView: WebView {}

怎么让使用它:

var webview= new XamWebView();
 
webview.HorizontalOptions = LayoutOptions.Fill;
webview.VerticalOptions = LayoutOptions.StartAndExpand;
//给个默认的深层和深层
webview.WidthRequest = 50;
webview.HeightRequest = 50;
 
webview.Source = "https://www.cnblogs.com/";

怎么让在IOS中,你都还都还可以使用自定义的委托:

[assembly: ExportRenderer (typeof(XamWebView), typeof(XamWebViewRenderer))]
namespace Core.iOS
{
    public class XamWebViewRenderer : WebViewRenderer
    {      
        protected override void OnElementChanged (VisualElementChangedEventArgs e)
        {
            base.OnElementChanged (e);            
            Delegate = new XamUIWebViewDelegate (this);           
        }
    }
}

怎么让用异步和小延迟重写LoadFinished以获取整个ContentSize.Height(已经 内容较大,即使加载完成后也都还都还可以怎么让 时间都还都还可以呈现)

public class XamUIWebViewDelegate : UIWebViewDelegate
{
    XamWebViewRenderer webViewRenderer;
 
    public XamUIWebViewDelegate (XamWebViewRenderer _webViewRenderer = null)
    {
        webViewRenderer = _webViewRenderer ?? new XamWebViewRenderer ();
    }     
 
    public override async void LoadingFinished (UIWebView webView)
    {
        var wv = webViewRenderer.Element as XamWebView;
        if (wv != null) {
            await System.Threading.Tasks.Task.Delay (50); // 这里的时间都还都还可以

调整
            wv.HeightRequest = (double)webView.ScrollView.ContentSize.Height;
        }            
    }
}

在Android中,您都还都还可以使用自定义的Android.Webkit.WebViewClient:

using WebView = Android.Webkit.WebView;
[assembly: ExportRenderer (typeof(XamWebView), typeof(XamWebViewRenderer))]
namespace Core.Droid
{
    
    public class XamWebViewRenderer : WebViewRenderer
    {
        static XamWebView _xwebView = null;
        WebView _webView;

        public XamWebViewRenderer(Context context) : base(context)
        {

        }
        class XamWebViewClient : Android.Webkit.WebViewClient
        {
            public override async void OnPageFinished(WebView view, string url)
            {
                if (_xwebView != null)
                {
                    int i = 10;
                    while (view.ContentHeight == 0 && i-- > 0)
                        await System.Threading.Tasks.Task.Delay(50);// 这里的时间都还都还可以

调整
                    _xwebView.HeightRequest = view.ContentHeight;
                }
            }
        }
        protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.WebView> e)
        {
            base.OnElementChanged(e);
            _xwebView = e.NewElement as XamWebView;
            _webView = Control;

            if (e.OldElement == null)
            {
                _webView.SetWebViewClient(new XamWebViewClient());
            }

        }
    }
}

放一张Android截图:

  • 分类 Xamarin.Forms
  •