不调用GetHeightForHeader和GetViewForHeader

我正在研究一个有两个部分的tableview。 我想在第二节标题中添加一个headerView。

我已经实现了下面的代码。 它调用TitleForHeader但不幸的是GetHeightForHeaderTitleForHeader都没有被调用。 任何人有任何线索?

 public override string TitleForHeader (UITableView tableView, nint section) { if (section == 0) { return "Details"; } if (section == 1) { return "Settings"; } return ""; } public override nfloat GetHeightForHeader(UITableView tableView, nint section) { if (section == 0) { return 0.0001f; } if (section == 1) { return 100.0f; } return UITableView.AutomaticDimension; } public override UIView GetViewForHeader(UITableView tableView, nint section) { if (section == 1) { UIView headerView = new UIView (new CGRect (0, 0, (float)tableView.Bounds.Width, (float)tableView.SectionHeaderHeight)); headerView.BackgroundColor = UIColor.Black; return headerView; } else { return null; } } 

我有同样的问题,只是意识到我设置委托和来源如此:

 Table.Delegate = new TableDelegate(this); //remove this bit Table.Source = new TableSource<string>(list, Table); 

我意识到我应该只使用UITableViewSource而不是设置两者。

UITableViewSourcereplace了以下两个类,它们在Xamarin.iOS中仍然可用,但通常不是必需的:

UITableViewDataSource – 在Xamarin.iOS中作为抽象类build模的Objective-C协议。 必须进行子类化,以便为每个单元格提供一个视图,以及有关表头中的页眉,页脚以及行数和部分的信息。

UITableViewDelegate – 在Xamarin.iOS中作为类build模的Objective-C协议。 处理select,编辑function和其他可选的表格function。

Xamarin文档

我只是将我的rowselected方法移到我的TableSource ,它现在调用TitleForHeaderTitleForHeader方法(它们不是相互排斥的), 设置source no委托。

有同样的问题,我只是忘记在viewDidLoad中设置委托

 public override void ViewDidLoad() { base.ViewDidLoad(); TableView.DataSource = new YourViewControllerTableDataSource(); TableView.Delegate = new YourViewControllerTableDelegate(); }