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 - 表格视图单元格动态高度取决于设备的主要内容,如果未能解决你的问题,请参考以下文章
使用 Storyboard 的 Swift 动态表格视图单元格高度