2015-08-23 90 views
9

我在静态表格视图单元格中有三个标签,中间标签应该是多行标签。具有多个标签的自定义单元格不显示多行标签

我在viewDidLoad()

self.tableView.estimatedRowHeight = 130.0 
self.tableView.rowHeight = UITableViewAutomaticDimension 

,故事情节是这样的

enter image description here

这里设置这两条线的约束每个子视图

顶部标签,标签中,底部标签,按钮

enter image description here

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

UPDATE

如果我改变中间标签751和垂直内容拥抱优先250的垂直压缩性优先,标签显示多线,但小区没有得到调整,使顶部和底部标签现在在细胞外。

更新2

我刚刚创建了一个示例项目,事实证明,它与动态细胞按预期工作,但不是静态的细胞。您可以在这里下载示例项目:https://dl.dropboxusercontent.com/u/67692950/ResizingCell.zip

+0

您是否正在寻找一种方法使标签的高度与需要显示所有线条一样高? – luk2302

+0

@ luk2302是的,以自动的方式 – gpichler

+0

你可能想看看[这个问题及其答案](http://stackoverflow.com/questions/12789013/ios-multi-line-uilabel-in-auto-布局) – luk2302

回答

5

我克隆了您的示例项目。我认为问题是你不需要设置UITableViewCell的高度。

这是一个简单的解决方案。

enter image description here

·若要在表格视图单元格行高 “默认”。(未检查的自定义)

在这种情况下,它的工作原理。

下载,我在这里实现的示例项目: https://www.dropbox.com/s/w8q6ov9qjfxu1l3/ResizingCell.zip?dl=0

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

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

+0

将底部标签设置为多行标签时,它不起作用。 – gabbler

0

您需要可以致电细胞layoutIfNeeded设置多标签的文本后或设置标签preferredMaxLayoutWidth

+0

它是一个带有静态单元格的'UITableViewController',所以我不能直接在单元格中调用它,并且'preferredMaxLayoutWidth'应该在iOS 8中自动完成 – gpichler

+0

@ user1463853您可以直接调用它,只需重写'tableView:willDisplayCell:' – Sulthan

2

首先,开放的故事板,设置你的tableview行高为100,取消选中自定义行高为tableview单元格,该值为目前的100.

其次,就像@DBoyer所说,致电layoutIfNeeded。如果您看到“无法同时满足约束条件,将尝试通过打破约束X来恢复”,将X的优先级降低到999.我认为警告可能与您获得该单元格有关,单元格框架为CGRectZero

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = super.tableView(tableView, cellForRowAtIndexPath: indexPath) 
    cell.layoutIfNeeded() 
    return cell 
} 
0

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