2015-07-03 69 views
1

我正在使用多行UILabelUITableViewCell进行自动布局。我的UILabel固定在顶部,右侧,底部和左侧。一切工作正常,直到我添加一些顶部边缘;如果我这样做,一些单元格的高度计算得很好,有些则没有,所以文本在这些情况下被截断。Xcode 6,iOS7 UITableViewCell UIlabel多行,Autolayout噩梦

我简化了我的观点,因为有点复杂。它看起来像这样:

enter image description here

enter image description here

这是相关的代码,我计算细胞的高度:

CellMessage *cell = self.prototypeCell; 
cell.message = [self messageForRowAtIndexPath:indexPath]; 
[self.prototypeCell layoutIfNeeded]; 

CGSize size = [self.prototypeCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize]; 
    message.cellHeight = size.height + 1; 

我已经阅读了大量SOF线程和教程,以及所有它们在微妙点上有所不同,有时他们说设置一个首选的最大宽度是关键点,我尝试设置并没有设置它,但我有相同的结果,但我不完全明白这个pa公羊工作:(

我在想什么/做错了什么?任何我可以尝试的东西,或任何提示指向正确的方向将非常感激。

+0

您是否尝试将尾随约束设置为'='? –

+0

http://www.raywenderlich.com/73602/dynamic-table-view-cell-height-auto-layout –

+0

我想知道为什么要设置Trailling Space> =?如果你想让单元格到UILabel展开,请尝试使用tralling space =并将压缩阻力优先级设置为默认值(即751) – thanyaj

回答

0

所以,我有一个类似的问题,不久前。 我的工作了这种方式(这是对SWIFT):

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
CellMessage *cell = (CellMessage *)[tableView.dataSource tableView:tableView cellForRowAtIndexPath:indexPath]; 
[cell sizeToFit]; 
[cell setNeedsUpdateConstraints]; 
[cell updateConstraintsIfNeeded]; 

CGSize size = [cell systemLayoutSizeFittingSize: UILayoutFittingCompressedSize]; 

return size.height+1; 
} 

这将计算与文本数据的大小。 但你会有一个问题,要计算文本的权利,你将需要使用约束来确定宽度,它不能拖尾/领先,它需要是一个宽度约束,所以在UITableViewCell自定义类你可以这样做:

- (void)updateConstraints { 
[super updateConstraints]; 
self.myLabel.preferredMaxLayoutWidth = CGRectGetWidth(self.myLabel.frame); 
} 

titleLabel是作为属性链接的UILabel。

顺便说一句,尝试修复您的尾随常数,而不是> =

+0

你能用相同的语言回答OP程序吗?他在ObjC中写道,尽管它们很容易翻译,但在ObjC中也会更好。 –

+0

感谢@RodolfoAntonici。它看起来很有希望,但我仍然有同样的问题:(我必须在这里丢失一些明显的东西 – ssantos

+0

感谢@朱连。至于我,经过12个小时的努力(真的),只要它作品:) – ssantos