在select / deselect上调整TableCell的大小

时间:2013-05-21 03:01:47

标签: ios xamarin.ios

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

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

我知道GetHeightForRow负责调整行的大小,但只在第一次显示单元格时调用它。在我看来,我需要提醒TableView在视图发生变化时重新轮询源的新大小,但我无法弄清楚如何去做。

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

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

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

1 个答案:

答案 0 :(得分:3)

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

您可能需要或不必指定开始/结束更新(这可能只适用于动画?)

tableView.BeginUpdates();
tableView.EndUpdates();