Xamarin ListView高度等于ContentSize

时间:2015-11-15 12:51:22

标签: listview xamarin xamarin.ios xamarin.forms

我已经在这两天里苦苦挣扎,现在仍然无法解决问题..所以我希望你们能帮助我!

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

对于WebView来说,它非常简单,因为它有一个LoadFinished事件,我能够将Height设置为等于它的内容。

现在我正在编写ListView,我真的遇到了麻烦。由于我从Web服务加载我的数据异步,因此在我的渲染器中UITableView的内容大小总是为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;
        }
    }
}

有谁知道我如何达到目标?

1 个答案:

答案 0 :(得分:2)

我会将网页视图放在listviews标题中。然后listviews内容应该按原样进行虚拟化。