我正在加载一个表视图,其中每个表格单元格都有一些左缩进(想想消息线程/回复),还包含一个动态高度的标签(回复的内容)。我正在使用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
电话,但没有成功。
答案 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)为我解决了这个问题。