具有多个标签的自调整单元格不显示多行标签
Self sizing cell with multiple labels does not show multiline label
我的静态 table 视图单元格中有三个标签,中间的标签应该是多行标签。
我在 viewDidLoad()
中设置这两行
self.tableView.estimatedRowHeight = 130.0
self.tableView.rowHeight = UITableViewAutomaticDimension
故事板看起来像这样
这是每个子视图的约束条件
顶部标签、中间标签、底部标签、按钮
我还将中间标签的行数设置为 0。但是它只显示一行,而不是多行。我想这一定与内容拥抱或内容压缩优先级有关,或者是因为我正在使用带有静态单元格的 UITableViewController
。
更新
如果我将中间标签的 Vertical Compression Resistance Priority 更改为 751 并将 Vertical Content Hugging Priority 更改为 250,标签显示多行,但单元格不会调整大小,因此顶部和底部标签在单元格之外现在。
更新 2
我刚刚创建了一个示例项目,结果证明它可以按预期使用动态单元格,但不能使用静态单元格。您可以在此处下载示例项目:https://dl.dropboxusercontent.com/u/67692950/ResizingCell.zip
您需要在设置多行标签的文本后在单元格上调用 layoutIfNeeded
或设置标签 preferredMaxLayoutWidth
首先,打开 Storyboard,将 tableview 行高设置为 100,取消选中 tableview 单元格的自定义行高,当前值为 100。
其次,如@DBoyer 所说,请致电layoutIfNeeded
。如果您看到 "Unable to simultaneously satisfy constraints, Will attempt to recover by breaking constraint X",请将 X 的优先级降低到 999。我认为当您获取单元格时,警告可能与此有关,单元格框架是 CGRectZero
。
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = super.tableView(tableView, cellForRowAtIndexPath: indexPath)
cell.layoutIfNeeded()
return cell
}
我克隆了您的示例项目。我认为问题在于您不需要设置 UITableViewCell 的高度。
这是一个简单的解决方案。
・在 Table 视图单元格中设置行高 "Default"。(未选中自定义)
在这种情况下,它有效。
下载我在这里实现的示例项目:
https://www.dropbox.com/s/w8q6ov9qjfxu1l3/ResizingCell.zip?dl=0
但另一种方法是根据 UILabel 的高度计算 UITableViewCell 的高度。
如果自定义cell比较复杂,最好将cell隔离为Custom cell。
对标签使用 aspectRatio 约束。它的目的是根据need.This改变宽度和高度将有助于
我的静态 table 视图单元格中有三个标签,中间的标签应该是多行标签。
我在 viewDidLoad()
self.tableView.estimatedRowHeight = 130.0
self.tableView.rowHeight = UITableViewAutomaticDimension
故事板看起来像这样
这是每个子视图的约束条件
顶部标签、中间标签、底部标签、按钮
我还将中间标签的行数设置为 0。但是它只显示一行,而不是多行。我想这一定与内容拥抱或内容压缩优先级有关,或者是因为我正在使用带有静态单元格的 UITableViewController
。
更新
如果我将中间标签的 Vertical Compression Resistance Priority 更改为 751 并将 Vertical Content Hugging Priority 更改为 250,标签显示多行,但单元格不会调整大小,因此顶部和底部标签在单元格之外现在。
更新 2
我刚刚创建了一个示例项目,结果证明它可以按预期使用动态单元格,但不能使用静态单元格。您可以在此处下载示例项目:https://dl.dropboxusercontent.com/u/67692950/ResizingCell.zip
您需要在设置多行标签的文本后在单元格上调用 layoutIfNeeded
或设置标签 preferredMaxLayoutWidth
首先,打开 Storyboard,将 tableview 行高设置为 100,取消选中 tableview 单元格的自定义行高,当前值为 100。
其次,如@DBoyer 所说,请致电layoutIfNeeded
。如果您看到 "Unable to simultaneously satisfy constraints, Will attempt to recover by breaking constraint X",请将 X 的优先级降低到 999。我认为当您获取单元格时,警告可能与此有关,单元格框架是 CGRectZero
。
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = super.tableView(tableView, cellForRowAtIndexPath: indexPath)
cell.layoutIfNeeded()
return cell
}
我克隆了您的示例项目。我认为问题在于您不需要设置 UITableViewCell 的高度。
这是一个简单的解决方案。
・在 Table 视图单元格中设置行高 "Default"。(未选中自定义)
在这种情况下,它有效。
下载我在这里实现的示例项目: https://www.dropbox.com/s/w8q6ov9qjfxu1l3/ResizingCell.zip?dl=0
但另一种方法是根据 UILabel 的高度计算 UITableViewCell 的高度。
如果自定义cell比较复杂,最好将cell隔离为Custom cell。
对标签使用 aspectRatio 约束。它的目的是根据need.This改变宽度和高度将有助于