Xamarin ListView高度等于ContentSize

Xamarin ListView高度等于ContentSize,listview,xamarin,xamarin.ios,xamarin.forms,Listview,Xamarin,Xamarin.ios,Xamarin.forms,我已经为此挣扎了两天,但似乎仍然无法修复它。。所以我希望你们能帮助我 我有一个网页,其中有一个WebView和一个ListView。这两个项目都可以自己滚动,但我不想这样。我希望这个页面可以完全滚动。 这意味着我必须将两个对象都放在ScrollView中,并将.Height设置为其contentSize 对于WebView来说,这非常简单,因为它有一个LoadFinished事件,我可以将高度设置为它的内容 现在我正在编写ListView,我在这方面遇到了很多麻烦。由于我从Web服务异步加载数据

我已经为此挣扎了两天,但似乎仍然无法修复它。。所以我希望你们能帮助我

我有一个网页,其中有一个WebView和一个ListView。这两个项目都可以自己滚动,但我不想这样。我希望这个页面可以完全滚动。 这意味着我必须将两个对象都放在ScrollView中,并将.Height设置为其contentSize

对于WebView来说,这非常简单,因为它有一个LoadFinished事件,我可以将高度设置为它的内容

现在我正在编写ListView,我在这方面遇到了很多麻烦。由于我从Web服务异步加载数据,因此在渲染器中,UITableView的contentsize似乎始终为0

public class RZNoScrollListViewRenderer : ViewRenderer<RZNoScrollTableView, UITableView>
{
private UITableView _tableView;

    protected override void OnElementChanged (ElementChangedEventArgs<RZNoScrollTableView> e)
    {
        base.OnElementChanged (e);

        if (Control == null)
            return;

        _tableView = Control as UITableView;
        ResizeView ();
    }

    public override void LayoutSubviews ()
    {
        base.LayoutSubviews ();
        ResizeView ();
    }

    private async void ResizeView()
    {
        if (_tableView != null) 
        {
            _tableView.LayoutIfNeeded ();
            var contenSizeHeight = _tableView.ContentSize.Height;
            var frame = _tableView.Frame;
            frame.Height = contenSizeHeight;

            _tableView.Frame = frame;

            var listElement = Element as RZNoScrollTableView;
            var bounds = new Xamarin.Forms.Rectangle (Element.Bounds.X, Element.Bounds.Y, Element.Bounds.Width, frame.Height);
            await Element.LayoutTo (bounds, listElement.TransitionSpeedMsec, listElement.Easing);
            Element.HeightRequest = bounds.Height;
        }
    }
}
public类RZNoScrollListViewRenderer:ViewRenderer
{
私有UITableView _tableView;
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
碱基。一个元素改变(e);
if(Control==null)
返回;
_tableView=控件作为UITableView;
ResizeView();
}
公共覆盖无效布局子视图()
{
base.LayoutSubviews();
ResizeView();
}
私有异步void ResizeView()
{
如果(_tableView!=null)
{
_tableView.layoutifneed();
var contenSizeHeight=\u tableView.ContentSize.Height;
var frame=_tableView.frame;
帧高度=上下文高度;
_tableView.Frame=Frame;
var listElement=作为RZNoScrollTableView的元素;
var bounds=new Xamarin.Forms.Rectangle(Element.bounds.X,Element.bounds.Y,Element.bounds.Width,frame.Height);
wait Element.LayoutTo(bounds,liselement.transitionspeedsec,liselement.Easing);
Element.HeightRequest=bounds.Height;
}
}
}

有人知道我如何达到目标吗?

我会将web视图放在ListView标题中。然后,ListView内容应该虚拟化。

感谢您的回复。您的解决方案不会有帮助,因为我在顶部有另一个视图,其中包含一个图像。我试着照你说的做(见下图)。红色是图像,下面是以WebView为标题的ListView。问题是ListView现在是可滚动的,并且顶部的图像保持静态。在TableView中,行的高度是否保持不变?根据行高和行数调整表视图的大小可能更容易。不,它们不是。。我选择罗伯特的答案,因为这对我很有帮助:)