sizeWithFont - 包含&的奇怪行为字符

时间:2009-08-20 15:22:24

标签: iphone uitableview uilabel ampersand

每当一个&在文本中出现,高度似乎一直在关闭。两个函数的返回值都小于实际高度:

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,显示彼此重叠的文本。

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

有人可以告诉我,至于我的生活,我不明白这里发生了什么,知道如何正确解决这个问题。

非常感谢。

2 个答案:

答案 0 :(得分:2)

不应直接调用

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

我怀疑您对actualWidth的调用sizeWithFont:constrainedToSize:lineBreakMode:比您预期的要宽,这样该行实际上并没有包裹。你是如何计算actualWidth的?

您可能希望将sizeWithFont:forWidth:lineBreakMode:替换为专门针对您尝试执行的操作。也就是说,它可能只是你正在进行的通话的包装。

答案 1 :(得分:1)

我遇到了同样的问题。我最终逃脱了&性格并将其改为&一切都很好。 UILabel非常聪明,可以显示逃脱的&正确地计算了尺寸。