Xamarin.ios 根据动态内容扩展Xamarin表单WebView的技巧
我的项目中有一个WebView。它可以有动态html内容。现在我已经给WebView指定了固定的宽度和高度,它可以滚动。但我想通过动态增加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>" +
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,大小将不匹配。例如,我认为标签不会呈现新行字符。