Xamarin.ios 根据动态内容扩展Xamarin表单WebView的技巧

Xamarin.ios 根据动态内容扩展Xamarin表单WebView的技巧,xamarin.ios,xamarin.android,xamarin.forms,Xamarin.ios,Xamarin.android,Xamarin.forms,我的项目中有一个WebView。它可以有动态html内容。现在我已经给WebView指定了固定的宽度和高度,它可以滚动。但我想通过动态增加WebView的高度来删除滚动 有没有像创建自定义渲染器之类的方法 示例代码 var webvw = new Webview(); var htmlSource = new HtmlWebViewSource(); htmlSource.Html = @"<html>" + "<head>" +

我的项目中有一个WebView。它可以有动态html内容。现在我已经给WebView指定了固定的宽度和高度,它可以滚动。但我想通过动态增加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
};
var webvw=new Webview();
var htmlSource=新的HtmlWebViewSource();
htmlSource.Html=@“”+
"" +
"" +
“@font-face{”+
“字体系列:Roboto Medium;“+fntsrc+”}”+
html,正文{margin:0px;}+
“正文{”+
“字体系列:Roboto Medium;”+
“字体大小:12px”+
“文本对齐:左;”+
“颜色:#acacac;“+”}”+
“正文:第一个孩子{”+
“字体系列:Roboto Medium;”+
“字体大小:12px”+
“字体大小:300;”+
“行高:24px;”+
“文本对齐:左;”+
“颜色:#ffffff;“+”}”+
"" +
"" +
"" +
dynamicContent++;
webvw.Source=htmlSource;
webvw.WidthRequest=500;
webvw.HeightRequest=500;
SatackLayout webContnet=新StackLayout{
VerticalOptions=LayoutOption.FillAndExpand,
方向=堆栈方向。垂直
};

有一种方法,但很复杂。WebView不会自动调整其内容的大小,因此唯一的方法是当内容通知您的代码它有多大时

要做到这一点,你需要

这是一个稍微复杂的过程,您需要一个CustomRenderer,并在每个本机项目中设置属性。请按照上面的链接逐步了解如何操作

您调用类似这样的Javascript来获取高度

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

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

然后当它返回时,将WebView设置为该高度。在执行此操作之前,您可能还需要等待NavigationCompleted事件发出,以确保内容已加载到您的WebView中。

有一种方法,但它很复杂。WebView不会自动调整其内容的大小,因此唯一的方法是当内容通知您的代码它有多大时

要做到这一点,你需要

这是一个稍微复杂的过程,您需要一个CustomRenderer,并在每个本机项目中设置属性。请按照上面的链接逐步了解如何操作

您调用类似这样的Javascript来获取高度

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

var height = Math.max( body.scrollHeight, body.offsetHeight, 
                       html.clientHeight, html.scrollHeight, html.offsetHeight );
然后当它返回时,将WebView设置为该高度。在执行此操作之前,您可能还需要等待NavigationCompleted事件被引发,以确保内容已加载到您的WebView中。

好的,这是我的“如果它看起来很愚蠢,但工作正常,那么它就不愚蠢”——答案

我遇到了同样的问题,并寻找一种方法来获得可能的高度

我现在的解决方案是创建一个带有costum renderes的标签来转换html代码。标签具有高度和宽度属性;)

因此,我创建标签,将其放入StackLayout(需要渲染),获取WebView的大小,从StackLayout中删除标签,然后添加具有完美大小的WebView:)

好的,这是我的“如果它看起来很愚蠢,但起作用,它就不愚蠢”——答案

我遇到了同样的问题,并寻找一种方法来获得可能的高度

我现在的解决方案是创建一个带有costum renderes的标签来转换html代码。标签具有高度和宽度属性;)

因此,我创建标签,将其放入StackLayout(需要渲染),获取WebView的大小,从StackLayout中删除标签,然后添加具有完美大小的WebView:)


@Atul你能提供详细信息吗?这对我来说很有效,我更喜欢这条路线而不是定制渲染器route@Atul你能提供详细信息吗?这对我来说很有效,我更喜欢这条路线,而不是使用TextType=HTML和WebView的自定义渲染器RouteLabel以不同的方式渲染。它将类似于常规文本,但对于更复杂的HTML,大小将不匹配。例如,我认为标签不会呈现新行字符。TextType=HTML和WebView的标签呈现方式不同。它将类似于常规文本,但对于更复杂的HTML,大小将不匹配。例如,我认为标签不会呈现新行字符。