【问题标题】:UITableView with different cell prototypes and heights using Storyboards使用 Storyboard 的具有不同单元格原型和高度的 UITableView
【发布时间】:2014-06-24 23:58:10
【问题描述】:

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

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

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

【问题讨论】:

    标签: ios xcode uitableview


    【解决方案1】:

    您需要使用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;
    }
    

    【讨论】:

    • 这很有意义!我将继续实施它并返回答案。谢谢!
    • 别担心,乐于助人:)
    • heightForRowAtIndex 路径是否会降低性能?在 SO 的其他地方听说过,但不记得在哪里。
    【解决方案2】:

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

    您的单元格出列中可能有一些逻辑,您可以在其中决定要为此类数据使用哪种单元格。您需要使用相同的逻辑来确定您将在那里使用哪种单元格并返回其高度。

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

    【讨论】:

    • 感谢您的回答。这一个加上@Fogmaster 制作的一个为我指明了正确的方向。祝您今天愉快!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-12
    相关资源
    最近更新 更多