使用Storyboard的UITableView具有不同的单元原型和高度

时间:2014-06-24 15:53:13

标签: ios xcode uitableview

我目前正在开发我的第一个iOS应用程序,并遇到了一个我似乎无法解决的问题。经过长时间的思考和奋斗,我决定在这里询问是否有人遇到过类似的问题,可以帮助我。

我有一个带有两个单元原型的UITableView。我可以毫无问题地渲染两种细胞类型,但是有一个小的捕获。一种细胞类型的高度为475px,而另一种仅为250px。渲染表视图时,表的每一行都具有相同的高度。我继续调试我的故事板,发现我的表视图的行高为475px。这对于较高的细胞来说很好,但是对于较小的细胞,它在它们之间留下了空白区域。

我希望能够根据渲染的单元格类型调整每行的高度。这可能吗?我正在考虑使用heightForRowAtIndexPath,但因为在执行时,单元格不存在,我无法检查某个索引处单元格的类。另外,在我的故事板中,我为两个单元格原型中的每一个指定了高度,但它没有在运行时反映出来。有谁知道如何解决这类问题?先谢谢你。

2 个答案:

答案 0 :(得分:5)

您需要使用heightForRowAtIndexPath但不应该检查表以找出哪个单元格在哪个索引中。你应该检查你的数据源。

例如,在cellForRowAtIndexPath中,您将拥有类似......

的内容
if ( /*some condition*/ ) {
    cell = //dequeue cell type 1
} else {
    cell = //dequeue cell type 2
}

因此,在heightForRow中,您执行完全相同的检查。

if ( /*some condition*/ ) {
    return 475;
} else {
    return 250;
}

答案 1 :(得分:2)

您需要使用tableView在UITableViewDelegate中实现所需单元格的高度:heightForRowAtIndexPath:

您的单元格中可能有一些逻辑出列,您可以在哪里确定所需的单元格类型。你需要使用相同的逻辑来确定你将在那里使用哪种类型的单元格并返回它的高度。

在实际创建单元格之前,将调用heightForRowAtIndexPath方法。这可能会带来一些挑战。