Ios 具有多个标签的自调整大小单元格不显示多行标签

Ios 具有多个标签的自调整大小单元格不显示多行标签,ios,swift,uitableview,xcode6,uistoryboard,Ios,Swift,Uitableview,Xcode6,Uistoryboard,静态表视图单元格中有三个标签,中间的标签应该是多行标签 我正在viewDidLoad()中设置这两行 故事板看起来像这样 下面是每个子视图的约束 顶部标签、中间标签、底部标签、按钮 我还将中间标签的行数设置为0。但是,它只显示一行,而不是多行。我想这一定与内容拥抱或内容压缩优先级有关,或者是因为我使用的是带有静态单元格的UITableViewController 更新 如果我将中间标签的垂直压缩阻力优先级更改为751,将垂直内容包含优先级更改为250,则标签将显示多行,但单元格未调整大小,因

静态表视图单元格中有三个标签,中间的标签应该是多行标签

我正在
viewDidLoad()中设置这两行

故事板看起来像这样

下面是每个子视图的约束

顶部标签、中间标签、底部标签、按钮

我还将中间标签的行数设置为0。但是,它只显示一行,而不是多行。我想这一定与内容拥抱或内容压缩优先级有关,或者是因为我使用的是带有静态单元格的
UITableViewController

更新

如果我将中间标签的垂直压缩阻力优先级更改为751,将垂直内容包含优先级更改为250,则标签将显示多行,但单元格未调整大小,因此顶部和底部标签现在位于单元格外部

更新2


我刚刚创建了一个示例项目,结果表明它可以像预期的那样使用动态单元格,但不能使用静态单元格。您可以在此处下载示例项目:

您需要在设置多行标签的文本后调用单元格上的
layoutifneed
,或者设置标签
preferredMaxLayoutWidth
首先,打开故事板,将tableview行高设置为100,取消选中tableview单元格的自定义行高,该值当前为100

其次,正如@DBoyer所说,需要调用
layoutifneed
。如果您看到“无法同时满足约束,将尝试通过打破约束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的高度

这是一个简单的解决方案

・在表格视图单元格中设置行高“默认值”。(未选中自定义)

在这种情况下,它是有效的

下载我在此处实施的示例项目:

但另一种方法是从UILabel的高度计算UITableViewCell的高度


如果自定义单元格更复杂,最好将单元格隔离为自定义单元格。

对标签使用aspectRatio约束。它的姿势是根据需要改变宽度和高度。这将有助于

您是否在寻找一种方法,使标签达到显示所有线条所需的高度?@luk2302是,您可能想自动查看iOS 8和自动调整大小的手机的这些答案恐怕已经过时了您是否将中间标签上的换行模式设置为“word wrap”?这是一个带有静态单元格的
UITableViewController
,因此我无法直接在手机上调用它,另外,
preferredMaxLayoutWidth
应该在iOS中自动完成8@user1463853您可以直接调用它,只需覆盖
tableView:willDisplayCell:
当您将底部标签设置为多行标签时,它不起作用。@pixyzehn我需要帮助
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = super.tableView(tableView, cellForRowAtIndexPath: indexPath)
    cell.layoutIfNeeded()
    return cell
}