我正在使用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不能解决我的问题。

有任何想法吗?

最佳答案

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

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

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

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

10-08 09:37