没有为自定义UITableViewCell调用GetHeightForRow

时间:2014-12-17 16:23:57

标签: ios uitableview xamarin.ios

我正在使用Xamarin iOS Designer来实现一个带有自定义UITableViewCell的表。我的表视图源代码如下:

public class StreamTableSource : UITableViewSource
{
    PrayerCard[] cards;

    public StreamTableSource(PrayerCard[] items)
    {
        this.cards = items;
    }

    public override UITableViewCell GetCell(UITableView tableView, MonoTouch.Foundation.NSIndexPath indexPath)
    {
        PrayerCardCell cell = (PrayerCardCell)tableView.DequeueReusableCell("prayercardcell");
        cell.Update(cards[indexPath.Row]);
        return cell;
    }

    public override float GetHeightForRow(UITableView tableView, NSIndexPath indexPath)
    {
        float computedHeight = 50.0f; // fixed for now
        Console.WriteLine("Height: {0}", computedHeight); // never shows
        return computedHeight; 
    }        

    ...
}

永远不会调用GetHeightForRow方法,因此最终得到标准的44点行。我的UITableViewController只有一个UITableViewSource而不是UITableViewDelegate所以the solution here,并不能解决我的问题。

任何想法?

1 个答案:

答案 0 :(得分:2)

UITableViewSourceUITableViewDataSourceUITableViewDelegate的组合(仅存在于Xamarin.iOS上)。

方法float GetHeightForRow(UITableView tableView, NSIndexPath indexPath)是委托的一部分。

如果在加载视图时未设置委托,则它似乎指向默认(空)实现。结果是UITableViewSource的委托方法不会被调用。

UITableViewSource必须尽早设置,一个好地方是视图控制器ViewDidLoad()的开头。