3

每当文本上出现 & 时,获取高度似乎一直都是关闭的。两个函数都返回小于实际高度:

CGSize labelSize = [nameLabel.text sizeWithFont:nameLabel.font constrainedToSize: CGSizeMake( actualWidth, MAXFLOAT ) lineBreakMode:UILineBreakModeWordWrap];

CGRect textSize = CGRectMake(0.0, 0.0, 320.0, FLT_MAX);
nameLabel.frame = [nameLabel textRectForBounds:textSize limitedToNumberOfLines:0];

尽管使用 textRectForBounds 的第二种方法返回更接近的实际高度,但它们都不会返回正确的高度。前者会返回 240,但后者会返回 700。实际是 750。

这弄乱了我的 UITableView 显示相互重叠的文本。

有趣的是,只要文本不包含任何 & 字符,就会返回相同的高度。

关于我的生活,有人可以启发我吗?我不明白这里发生了什么,并且知道如何正确解决这个问题。

提前非常感谢。

4

2 回答 2

2

-textRectForBounds:limitedToNumberOfLines:不应直接调用(注意docs)。所以不一定正确。它还指出“UITableViewCell 对象中的标签是基于单元格尺寸的,而不是请求的尺寸。”

我怀疑actualWidth在您的通话中sizeWithFont:constrainedToSize:lineBreakMode:比您预期的要宽,因此该行实际上并未换行。你是怎么计算的actualWidth

您可能希望将其替换sizeWithFont:forWidth:lineBreakMode:为专门针对您正在尝试做的事情。也就是说,它可能只是您正在拨打的电话的包装。

于 2009-08-20T15:47:38.477 回答
1

我只是有同样的问题。我最终逃脱了 & 字符并将其更改为 & 并且一切正常。UILabel 足够聪明,可以正确显示转义和正确计算大小。

于 2010-01-15T17:38:58.370 回答