具有动态UILabel高度的UITableViewCell缩进

时间:2013-10-28 01:04:16

标签: ios ios7

我正在加载一个表视图,其中每个表格单元格都有一些左缩进(想想消息线程/回复),还包含一个动态高度的标签(回复的内容)。我正在使用AutoLayout,因此UILabel大小本身。为了实现每个UITableViewCell的缩进,我按照SO上的人的建议来覆盖layoutSubviews的{​​{1}}所以它看起来像这样:

UITableViewCell

现在发生了什么,但有时UILabel文本将在底部被截断。在我看来,UILabel正在计算它的合适高度和绘图本身(由于它是动态的)而不是具有缩进的新帧大小 - 在缩进时,相同文本的可用宽度较小,所以它应该知道它需要更高。

如果我删除此缩进并注释掉我- (void)layoutSubviews { [super layoutSubviews]; float indentPoints = self.indentationLevel * self.indentationWidth; self.contentView.frame = CGRectMake(indentPoints, self.contentView.frame.origin.y, self.contentView.frame.size.width - indentPoints, self.contentView.frame.size.height); } 的覆盖,或者如果我将呼叫放在layoutSubviews的末尾而不是开头,则文本不再被截断,而是我失去了我的缩进。

我想要的是我的[super layoutSubviews]适当地缩进,并且我的动态UILabel能够识别新的帧大小并绘制而没有任何截止。我尝试在UITableViewCell的各个地方拨打layoutIfNeeded电话,但没有成功。

2 个答案:

答案 0 :(得分:0)

您需要使用以下方法预先计算UILabel的大小:

CGSize size = [str sizeWithFont:label.font constrainedToSize:CGSizeMake(label.bounds.size.width, CGFLOAT_MAX) lineBreakMode:NSLineBreakByWordWrapping];

用于调整细胞大小的用途。在tableview数据源heightForRowAtIndexPath

中执行此操作可能更好

答案 1 :(得分:0)

原来这个问题与以下Stack Overflow帖子有相同的根本原因:UILabel not wrapping text correctly sometimes (auto layout)

使用已接受的解决方案解决此问题(在layoutSubViews中设置preferredMaxLayoutWidth)为我解决了这个问题。