Xcode 6,iOS7 UITableViewCell UIlabel多行,Autolayout噩梦
问题描述:
我正在使用多行UILabel
对UITableViewCell
进行自动布局。我的UILabel
固定在顶部,右侧,底部和左侧。一切工作正常,直到我添加一些顶部边缘;如果我这样做,一些单元格的高度计算得很好,有些则没有,所以文本在这些情况下被截断。Xcode 6,iOS7 UITableViewCell UIlabel多行,Autolayout噩梦
我简化了我的观点,因为有点复杂。它看起来像这样:
这是相关的代码,我计算细胞的高度:
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公羊工作:(
我在想什么/做错了什么?任何我可以尝试的东西,或任何提示指向正确的方向将非常感激。
答
所以,我有一个类似的问题,不久前。 我的工作了这种方式(这是对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。
顺便说一句,尝试修复您的尾随常数,而不是> =
您是否尝试将尾随约束设置为'='? –
http://www.raywenderlich.com/73602/dynamic-table-view-cell-height-auto-layout –
我想知道为什么要设置Trailling Space> =?如果你想让单元格到UILabel展开,请尝试使用tralling space =并将压缩阻力优先级设置为默认值(即751) – thanyaj