ios swift - 表格视图单元格动态高度取决于设备

Posted

技术标签:

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

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

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

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

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

【问题讨论】:

【参考方案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 方法,否则上面 代码将不起作用(它将覆盖这些属性)。

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

【讨论】:

以上是关于ios swift - 表格视图单元格动态高度取决于设备的主要内容,如果未能解决你的问题,请参考以下文章

swift,如何使表格视图单元格具有动态高度[重复]

动态表格视图单元格高度

使用 Storyboard 的 Swift 动态表格视图单元格高度

iOS 6 AutoLayout 与多个 tableviews 所有动态高度

具有动态高度单元格但所有单元格同时显示的 iOS 表格视图

如何根据swift 3中的集合视图高度动态增加表格视图高度?