2016-10-01 15 views
1

私は自分のプロジェクトにWebViewを持っています。動的なhtmlコンテンツを持つことができます。今のところ私はWebViewに一定の幅と高さを与え、スクロールします。しかし、WebViewの高さを動的に増やしてスクロールを削除したい。トリック拡張XamarinフォームWebViewを動的コンテンツごとに

カスタムレンダラなどを作成するなどの方法はありますか。

サンプルコード

var webvw = new Webview(); 
var htmlSource = new HtmlWebViewSource(); 
htmlSource.Html = @"<html>" + 
       "<head>" + 
       "<style type=\"text/css\">" + 
       "@font-face {" + 
       "font-family: Roboto-Medium;" + fntsrc + "}" + 
       "html,body{margin:0px;}" + 
       "body {" + 
       "font-family: Roboto-Medium;" + 
       "font-size: 12px" + 
       "text-align: left;" + 
       "color: #acacac;" + "}" + 
       "body :first-child{" + 
       "font-family: Roboto-Medium;" + 
       "font-size: 12px" + 
       "font-weight: 300;" + 
       "line-height: 24px;" + 
       "text-align: left;" + 
       "color: #ffffff;" + "}" + 
       "</style>" + 
       "</head>" + 
       "<body style=\"background-color: transparent;\" >" + 
       dynamicContent + "</body>" + "</html>"; 
       webvw.Source = htmlSource; 
       webvw.WidthRequest = 500; 
       webvw.HeightRequest = 500; 

SatackLayout webContnet=new StackLayout{ 
    VerticalOptions=LayoutOption.FillAndExpand, 
    Orientation=StackOrientation.Vertical 
}; 

答えて

1

ござい方法があるが、それは複雑です。 WebViewはコンテンツに自動的にサイズを設定しないので、コンテンツがコードにどれくらいの大きさを通知しているかが唯一の方法です。

これを行うにはInvoke C# from Javascriptが必要です。

これはやや複雑な手順で、CustomRendererと各ネイティブプロジェクトのプロパティを設定する必要があります。上記のリンクをたどって、手順をステップバイステップで説明してください。

Javascriptをあなたはそのが戻ったときに、その高さにあなたのWebViewを設定し、高さ

var body = document.body, 
    html = document.documentElement; 

var height = Math.max(body.scrollHeight, body.offsetHeight, 
         html.clientHeight, html.scrollHeight, html.offsetHeight); 

を取得するには、このような何かを呼び出します。 WebViewにコンテンツがロードされていることを確認する前にNavigationCompletedイベントが発生するまで待つ必要があります。

+0

方向を指してくれてありがとう。私はそれを他の方法でやった。 – Atul

+0

@Atulどのようにしましたか?ありがとうございました – Rexxo

+0

@Atul場合は、詳細を提供することができますか? –

1

okここに私の "は馬鹿に見えますが、それは愚かではありません"と答えています。

私は同じ問題に遭遇し、可能な高さを得る方法を探しました。

私のソリューションでは、htmlコードを変換するためにcostum renderesでlableを作成するようになりました。ラベルは高さと幅のプロパティを持っています;)

私はラベルを作成し、それをStackLayout(レンダリングする必要があります)に入れ、WebViewにサイズを取得し、StackLayoutからラベルを削除して今すぐ追加します完璧なサイズのWebView :)

webView = new WebView(); 
var htmlSource = new HtmlWebViewSource(); 
htmlSource.Html = htmlCode; 
webView.Source = htmlSource; 

tmpLable = new HyperLinkLabel { 
    Text = htmlCode, 
}; 

stackLayout.Children.Add(tmpLable); 

webView.WidthRequest = tmpLable.Width; 
webView.HeightRequest = tmpLable.Height; 

stackLayout.Children.Remove(text); 

stackLayout.Children.Add(web); 
関連する問題