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