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

Posted

技术标签:

【中文标题】sizeWithFont - 包含 & 字符时的奇怪行为【英文标题】:sizeWithFont - weird behavior when containing the & character 【发布时间】:2009-08-20 15:22:23 【问题描述】:

每当文本上出现 & 时,获取高度似乎总是不正确。两个函数都返回小于实际高度:

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 显示相互重叠的文本。

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

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

非常感谢。

【问题讨论】:

对于您的第一个示例,约束大小的最大值和最小值是多少? 【参考方案1】:

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

我怀疑您对sizeWithFont:constrainedToSize:lineBreakMode: 的调用中的actualWidth 比您预期的要宽,因此该行实际上并未换行。你是如何计算actualWidth的?

您可能想用sizeWithFont:forWidth:lineBreakMode: 替换它,它专门用于您正在尝试做的事情。也就是说,它可能只是您正在拨打的电话的包装。

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于sizeWithFont - 包含 & 字符时的奇怪行为的主要内容,如果未能解决你的问题,请参考以下文章

sizeWithFont:在 iOS 7 中

sizeWithFont 返回随机值

sizeWithFont:constrainedToSize:lineBreakMode 已弃用

sizeWithFont:constrainedToSize 不适用于自定义字体

多线程崩溃中的 sizeWithFont!

sizeWithFont: ConstrainedToSize: lineBreakMode: 方法在 iOS 7 中已弃用