Xamarin Forms - ListView中的iOS动态ViewCell大小

时间:2017-01-20 18:08:44

标签: c# xamarin xamarin.ios xamarin.forms

以下XF应用程序(下面的代码)创建一个包含2个自定义单元格的简单ListView。点击单元格使用IsVisible属性来显示第二个标签。

在Android上,这可以很好地调整ViewCell的大小以适应当前显示的内容。当Detail项目可见时,ViewCell会展开以显示详细信息。

在iOS上,这不起作用。

以下是该应用在首次发布时的显示方式......

enter image description here

点击第一个ViewCell时,会跳过IsVisible属性并显示详细信息项。但是,ViewCell保持相同的高度,导致它溢出,如下所示......

enter image description here

如何在iOS端实现这一目标?

这是代码......

XAML

{{1}}

C#

{{1}}

1 个答案:

答案 0 :(得分:5)

ViewCell无法自动找出它应该有多高。您必须通过设置Height或强制更新来支持它。不幸的是,Height无法绑定。

选项1:如果每行的高度不同,并且列表无法确定正确的高度,请使用此选项。

class CustomViewCell : ViewCell
{
  protected override void OnBindingContextChanged()
  {
    base.OnBindingContextChanged();
    // Do some calculation in here to get the height you need.
    // Here we are using an example that bases the size on the result of ToString()
    string text = BindingContext.ToString();
    Height = 10 + ((int)(text[0]) - 65);
  } 
}

选项2:动态更改高度(可能是您想要的)

void SomeEventHandler(object sender, EventArgs args)
{
   // Let's assume an image was tapped...
   var image = sender as Image;
   // ...and the image is in a cell.
   var viewCell = image.Parent.Parent as ViewCell;

   // You would FIRST change the height of the content (in this case the image)
   if (image.HeightRequest < 250)
   {
       image.HeightRequest = image.Height + 100;
       // And THEN tell the cell to update (Note: you should not be required
       // to subclass the cell)
       viewCell.ForceUpdateSize();
   }
}

确保HasUnevenRows = true,否则强制更新不会产生影响。