0

我正在像这样以编程方式制作一个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() ”构建自己的内容(标签、按钮等),这是他们的代码片段

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)

最后看起来像

所以有什么问题?

4

2 回答 2

0

为了根据内容使 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;
于 2016-01-15T12:37:33.273 回答
0

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

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

于 2016-01-14T11:49:23.347 回答