我正在使用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不能解决我的问题。有任何想法吗?
最佳答案
UITableViewSource
是UITableViewDataSource
和UITableViewDelegate
的组合(仅在Xamarin.iOS上存在)。
方法float GetHeightForRow(UITableView tableView, NSIndexPath indexPath)
是委托的一部分。
如果在视图已加载时未设置委托,则它似乎指向默认(空)实现。结果是UITableViewSource
的委托方法将不会被调用。UITableViewSource
必须足够早地设置,一个好地方是视图控制器ViewDidLoad()
的开始。