【问题标题】:ios swift - table view cell dynamic height depending on deviceios swift - 表格视图单元格动态高度取决于设备
【发布时间】:2016-07-26 13:16:22
【问题描述】:

有很多帖子询问如何使表格视图单元格高度动态化,我知道我可以通过HeightForRowAtIndexPath 做到这一点。

我的问题是这是否是好的做法。

这似乎是一种不可扩展的解决方案,可以检查设备并硬编码高度,以便能够在 iPhone 6 plus 上占用更多空间。

这是一种好的做法,应该这样做,还是有更好的方法? `

【问题讨论】:

    标签: ios uitableview height standards


    【解决方案1】:

    您不应该为表格视图单元格的高度硬编码代码。

    您应该通过完美计算表格视图单元格的高度来应用高度

    如果您对代码进行硬编码,将来可能会出现问题,因此最好练习一下每个单元格的动态大小

    【讨论】:

      【解决方案2】:

      如果您的数据保持静态或未动态更改,则heightForRowAtIndexPath(给出静态高度)的硬编码是可以的,但如果数据正在更改,那么执行硬编码不是一个好习惯。您需要计算每一行的高度,以便将数据放入其中。

      【讨论】:

        【解决方案3】:

        您可以为您的TableView 设置一个高度乘以一个合适的分数。假设您为 iPhone 6 Plus 设计了尺寸为 1242 × 2208 像素(414 × 736 点)的单元。现在你可以推断出一个 heightRatio w.r.t 你当前正在运行的设备,比如

        let heightRatio = UIScreen.mainScreen().bounds.height / 736
        

        所以在heightForRowAtIndexPath 中,您可以将高度返回为

        return yourInterfaceBuilderCellHeight * heightRatio
        

        【讨论】:

        • 谢谢大家的回答。谢谢马修斯
        • 为 Swift 5 更新: 只需将 heightRatio 的计算方式更改为:let heightRatio = UIScreen.main.bounds.height / 736
        【解决方案4】:

        如果您的数据是动态变化的,并且您需要设置 tableview 单元格高度取决于该数据高度,那么 Apple 会为此提供解决方案。

        只需将两个 tableview 属性设置为如下示例。

        _tableViewOne.estimatedRowHeight = 50; //minimum row height
        _tableViewOne.rowHeight = UITableViewAutomaticDimension;
        

        因此它将根据其内容占用行高度

        不要使用 tableview 的 heightForRowAtIndexPath 方法,否则上面 代码将不起作用(它将覆盖这些属性)。

        你不需要为身高做任何其他事情。系统会处理的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-01-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-07-16
          • 2018-06-15
          • 2013-05-16
          • 2016-08-03
          相关资源
          最近更新 更多