1

我是 iOS 和 MonoTouch 的新手,我有一个非常基本的需求——我有两个截然不同的视图可以显示在同一个表格单元格中,具体取决于它是否被选中。当您加载应用程序时,我将在自定义 UITableView 中显示产品列表,取消选择所有行,并且每一行基本上只在标签中显示产品名称。一旦用户点击其中一行并选择它,我就会显示一个非常不同的视图,其中包含更多的购物车布局。由于这两个视图是如此不同,因此它们的大小也大不相同。我需要的是单元格本身(或行?)根据当前显示的任何视图的自然高度来增长和缩小。

我正在为解决方案使用 UITableViewController、UITableViewSource 和 UITableViewCell 的后代。我所做的是将两个版本都添加到单元格的 ContentView 中,然后在选择/取消选择单元格/行以显示正确的布局时根据需要设置 Hidden 属性。效果很好。我现在处于演示模式,所以我并不太担心效率或响应能力,这将不得不在以后出现。

我知道 GetHeightForRow 负责调整行的大小,但它只在第一次显示单元格时被调用一次。在我看来,随着视图的变化,我需要提醒 TableView 重新轮询源以获取新的大小,但我不知道该怎么做。

我尝试(相当希望)使用 Cell.SetNeedsLayout 和 Cell.SetNeedsDisplay 再次手动调用 GetHeightForRow,希望这会导致表重新查询新维度的源,但没有乐趣。

我修改了直接方法,尝试调整 contentview 本身的大小,但它似乎并没有在任何地方领先。我觉得好像需要告诉表查询新的行大小,但我愿意接受任何建议。

当然我不是第一个尝试这个的人?我错过了什么?

4

1 回答 1

3

尝试GetHeightForRow通过调用ReloadRows来强制再次调用。

您可能需要也可能不需要指定开始/结束更新(不过,这可能只是用于动画?)

tableView.BeginUpdates();
tableView.EndUpdates();
于 2013-05-21T16:34:13.297 回答