如何在swift中的动态tableView中拥有多个单元格大小?

时间:2017-04-23 12:21:10

标签: ios swift tableviewcell

我希望在tableView中拥有不同大小的单元格但是在构建和运行应用程序之后我发现所有单元格都具有相同的大小,并且更大的单元格被裁剪,其内容变得不完整。我在属性检查器中设置了大小。

this is an screenshot

3 个答案:

答案 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

  1. 每个子视图是否都有约束全部的约束?
  2. 是否存在 contentView 从上到下的限制?
  3. 您是否设置 tableView.rowHeight = UITableViewAutomaticDimension

答案 2 :(得分:0)

为原型单元定义自动布局约束。

指定表格视图的 estimatedRowHeight

将表格视图的rowHeight设置为 UITableViewAutomaticDimension

示例

tableView.estimatedRowHeight = 44.0
tableView.rowHeight = UITableViewAutomaticDimension

如果您使用的是Autolayout,一切都会按预期工作。

您将到达示例演示。

https://www.dropbox.com/s/ug9xu0yfcua902o/SelfSizingDemo.zip?dl=0