答案 0 :(得分:3)
就像实施一样简单:
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return CGFloat(#your desired size#)
}
只需在此函数中使用switch / case并使用indexPath.row。您还可以使用UITableViewAutomaticDimension
进行自动调整大小
修改强>
根据标题,这个问题的描述和所提供的图片,我猜测了3种可能的情况,并试图在我上面的简短回答中涵盖所有情况。但正如Rikh认为不是这种情况,我会清理一下。
请记住,对于动态行,您必须在autolayout中修复其所在位置的所有视图,这意味着您必须从场景顶部到底部和左侧设置约束。 可能的情况是:
情况1: 您的表中有2个不同的单元格,您知道它们的大小(第一行是type1,其他单元格是type2)。
在这种情况下你只需要在我提到的函数中添加一个if子句或switch / case(想象第一行是88点,其余的是44点):
return indexPath.section == 0 ? CGFloat(88.0) : CGFloat(44.0)
情况2: 您的第一行是固定大小,其余行是动态的。
在您的单元格上设置正确的约束后,在viewDidLoad
添加tableView.estimatedRowHeight = CGFloat(44.0)
,其中estimatedRowHeight是您的单元格的最小可能高度。然后你可以像这样编写代码:
return indexPath.section == 0 ? CGFloat(88.0) : UITableViewAutomaticDimension
情况3:
行的高度都是动态的,您希望它们全部自行扩展。在这种情况下,你不需要我提到的功能。实际上,如果你的代码中有它,你必须删除它。
在这种情况下,继续并将此代码添加到代码的viewDidLoad
(想象您的单元格的最小可能高度为44磅):
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = CGFloat(44.0)
再次记住,正确设置所有约束以使其正常工作非常重要。一个例子:我猜“细节”标签是使你的行高度增长而标题是固定大小的标签,所以这些是你在“细节”标签上需要的约束:将其高度设置为大于等于(> = )21,将其设置为在superview中间垂直对齐(通过设置故事板中的“垂直容器”约束),将水平空间设置为“title”标签,将尾随空间设置为superview,将行数设置为0使其成为无限扩展,最后将换行符属性设置为“自动换行”。在这种情况下,您的标题必须具有特定的宽度约束,否则您将收到错误。
P.S。:实际上现在我正在写这个,我可以想象另一种情况,你的“标题”标签的宽度也是动态的。这会让你的tableView非常难看,但如果这是你的情况,你需要在你的标签上设置“内容拥抱”和“内容压缩”,这里描述了Here (CHCR)
答案 1 :(得分:0)
https://www.raywenderlich.com/129059/self-sizing-table-view-cells
答案 2 :(得分:0)
为原型单元定义自动布局约束。
指定表格视图的 estimatedRowHeight
将表格视图的rowHeight设置为 UITableViewAutomaticDimension
示例
tableView.estimatedRowHeight = 44.0
tableView.rowHeight = UITableViewAutomaticDimension
如果您使用的是Autolayout,一切都会按预期工作。
您将到达示例演示。
https://www.dropbox.com/s/ug9xu0yfcua902o/SelfSizingDemo.zip?dl=0