Xamarin.forms 表单-我在iOS上的响应性网络视图存在奇怪的高度问题

Xamarin.forms 表单-我在iOS上的响应性网络视图存在奇怪的高度问题,xamarin.forms,wkwebview,Xamarin.forms,Wkwebview,我有一个ListView,里面我想绑定多个高度不同的WebView。我想根据每个Web视图的内容计算其高度,并相应地显示它 它在安卓系统上运行——在iOS系统上,所有的网络视图都太大了 await System.Threading.Tasks.Task.Delay(100); var result = (double)webView.ScrollView.ContentSize.Height; _webView.HeightRequest = resul

我有一个ListView,里面我想绑定多个高度不同的WebView。我想根据每个Web视图的内容计算其高度,并相应地显示它

它在安卓系统上运行——在iOS系统上,所有的网络视图都太大了

       await System.Threading.Tasks.Task.Delay(100);
       var result = (double)webView.ScrollView.ContentSize.Height;
       _webView.HeightRequest = result;
奇怪的是:webview的html字符越多,它就越大。因此,我可以只添加一个字符,另一个50px将添加到高度

这里要发布的代码很多,但这里有一个指向github上项目的链接:

在检查项目后,我们找到了无法在iOS设备中工作的原因

原因是
webView.ScrollView.ContentSize的
宽度
不正确,太小,为27。因此,它不能正确显示

System.Console.WriteLine("----" + resultWidth + "-----"+ resultHeight + "----"+ _webView.Width);
输出

2020-06-04 11:19:58.066542+0800 MultipleWebViews.iOS[50674:1690400] ----27-----642----375
解决方案

您可以通过
HybridWebView
的宽度计算
高度
,并为
HybridWebView
设置计算的
高度

DidFinishNavigation方法代码如下:

public override async void DidFinishNavigation(WKWebView webView, WKNavigation navigation)
{

    try
    {
        var _webView = webViewRenderer.Element as HybridWebView;
        if (_webView != null)
        {
            await System.Threading.Tasks.Task.Delay(100);
            var resultWidth = (double)webView.ScrollView.ContentSize.Width;
            var resultHeight = (double)webView.ScrollView.ContentSize.Height;
            System.Console.WriteLine("----" + resultWidth + "-----"+ resultHeight + "----"+ _webView.Width);

            double result = MeasureTextHeightSize(_webView.messageContent, _webView.Width, UIFont.LabelFontSize, null);

            _webView.HeightRequest = result;

            MessagingCenter.Send<Object, PassModel>(this, "LoadFinished", new PassModel(_webView.Id, Convert.ToDouble(result)));
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine("Error at HybridWebViewRenderer LoadingFinished: " + ex.Message);
    }
}
效应

2020-06-04 11:19:58.066542+0800 MultipleWebViews.iOS[50674:1690400] ----27-----642----375


注意:您可以根据当前系统字体大小修改此方法的
fontSize
。还可以自定义返回值,例如
return(double)sizeF.Height+10
,以适应屏幕。

Hi,感谢在此处共享示例项目链接。这将有助于找到解决方案。我会在我的本地网站上查看:-)完美!不幸的是,一旦我开始将html内容包装到div中,我仍然有一个问题。它再次增加了大量不必要的间距。如果需要,我可以在github中重新检查所有内容needed@TJP好的,你可以在github中更新它,我会检查一下。此外,请记住接受它作为答案(单击✔ 在这个答案的左上角),它将帮助其他有类似问题的人!我现在用更复杂的HTML对其进行了更新,它似乎再次对创建的高度产生了负面影响。@TJP感谢您的更新,我将进行检查。@TJP如果包含
div
,则解决方案无法始终工作。虽然可以使用
如果。。。否则…
将无法知道是否包含
div
,但这种方法不会一直有效。因为
div
的样式可以不同。如果好消息会在这里更新的话,我会继续寻找最好的slution。