如何使 tableview 行高取决于其内容

Posted

技术标签:

【中文标题】如何使 tableview 行高取决于其内容【英文标题】:how to make tableview row height depend on its content 【发布时间】:2016-01-14 11:25:01 【问题描述】:

我正在像这样以编程方式制作一个 tableView

tableView = UITableView.init(frame: CGRectZero, style: .Plain)
tableView.delegate = self
tableView.dataSource = self
self.view = tableView

然后我将其 rowHeight 值设置为

tableView.estimatedRowHeight = 250
tableView.rowHeight = UITableViewAutomaticDimension

每个单元格都在单独的 .swift 文件中进行描述,每个单元格都有函数 'construct()' 构建自己的 content (标签、按钮等),这是他们的一段代码

let btnControl = UIButton()
btnControl.frame = CGRectMake(avatar.frame.origin.x, avatar.frame.origin.y + avatar.frame.size.height + 10, screenWidth - 20, 30)
self.addSubview(btnControl)

最后看起来像

那么问题出在哪里?

【问题讨论】:

也许你的约束设置错误,如果你想使用UITableViewAutomaticDimension ,你必须将你的单元格的最大视图固定在顶部和底部,然后单元格只根据那个进行缩放 也许吧。我根本没有做任何限制。正如您在图片上看到的,我有一张图片、3 个标签和按钮。您能帮我将图像与行顶部和按钮与行底部连接起来吗?我的意思是,以编程方式创建约束。我们正在使用 cell-swift-file 中的函数构造,正如我在 startPost 中描述的那样 事实上,我从来没有用代码创建约束,所以我不能真正帮助你,你为什么不能使用故事板呢?只需为顶部和底部容器创建 2 个约束,如果您尝试以编程方式创建所有内容,则更加困难,以编程方式更快的方法是计算图像或任何视图高度,然后根据 heightForRow 设置单元格的高度 【参考方案1】:

如果您需要以编程方式创建约束,您将在文档页面中看到您需要的所有内容:https://developer.apple.com/library/ios/documentation/AppKit/Reference/NSLayoutConstraint_Class/index.html

我知道做您正在寻找的唯一其他方法是获取 UITableViewDelegate 协议的“tableView(_:heightForRowAtIndexPath:)”实现中每个单元格的大小。

【讨论】:

【参考方案2】:

要根据内容使 UITableviewCell 动态化,您必须使其内容视图的子视图动态化。在您的情况下,您必须使所有使用的 UILabel 动态化。这是代码。

CGSize maximumLabelSize = CGSizeMake(your label width, FLT_MAX);
sizeWithFont:yourLabel.font constrainedToSize:maximumLabelSize
lineBreakMode:yourLabel.lineBreakMode];

//adjust the label the the new height.
CGRect newFrame = yourLabel.frame;
newFrame.size.height = expectedLabelSize.height;
yourLabel.frame = newFrame;

现在取决于一个 UILable 高度,您必须管理所有 UILabel y 和高度如果您已经完成了单元格内容视图的最后一个子视图。计算最后一个子视图的高度 + 最后一个子视图的 origin.y 将是 UITableview 单元格的高度。

所以在 heightForRowAtIndexPath 委托方法中传递这个高度。

(CGFloat)tableView:(UITableView *)tableView 
heightForRowAtIndexPath:(NSIndexPath *)indexPath;

【讨论】:

以上是关于如何使 tableview 行高取决于其内容的主要内容,如果未能解决你的问题,请参考以下文章

Vuetify相等的高度v-tab-items

HTML <sup /> 标签影响行高,如何使其保持一致?

tableView 未设置自动行高

如何正确更改 TableView 的行高?

如何计算 tableView 行高并将值传递给 heightForRowAtIndexPath

TableView性能优化