繁体   English   中英

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

[英]How to have multiple cell sizes in a dynamic tableView in swift?

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

这是截图

它就像实现一样简单:

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return CGFloat(#your desired size#)
}

只需在此函数中使用switch / case并使用indexPath.row。 您还可以使用UITableViewAutomaticDimension进行自动调整大小

编辑:

根据标题,这个问题的描述和提供的图片,我猜测了3种可能的情况,并试图在上面的简短回答中涵盖所有情况。 但是,正如利赫认为情况并非如此,我将要清理一切。

请记住 ,对于动态行,您必须在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中间垂直对齐(通过在storyboard中设置“Vertical in Container”约束),将水平空间设置为“title”标签,将尾随空间设置为superview,将行数设置为0,使其展开无限地,最后将换行符属性设置为“自动换行”。 在这种情况下,您的标题必须具有特定的宽度约束,否则您将收到错误。

PS:实际上现在我正在写这个我可以想象另一种情况,你的“标题”标签的宽度也是动态的。 这将使你的tableView非常难看,但如果这是你的情况,你需要在你的标签上设置“内容拥抱”和“内容压缩”, 这里描述(CHCR)

https://www.raywenderlich.com/129059/self-sizing-table-view-cells

  1. 每个子视图是否都有限制所有方面的约束?
  2. 是否存在从contentView的顶部到底部的约束?
  3. 你在设置tableView.rowHeight = UITableViewAutomaticDimension吗?

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

指定表视图的estimatedRowHeight

将表视图的rowHeight设置为UITableViewAutomaticDimension

tableView.estimatedRowHeight = 44.0
tableView.rowHeight = UITableViewAutomaticDimension

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

您将在此获得示例演示。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM