如何使 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 行高取决于其内容的主要内容,如果未能解决你的问题,请参考以下文章