Ios NSString sizeWithFont返回错误的字体值

Ios NSString sizeWithFont返回错误的字体值,ios,nsstring,uilabel,Ios,Nsstring,Uilabel,我在我的应用程序中使用了Georgia和Georgia粗体字体。因为它必须显示我从服务器下载的大量文本数据,所以我在应用程序的各个地方广泛使用了NSString的方法sizeWithFont:constrainedToSize:lineBreakMode:。问题是,它返回的值不太正确,像y、j和g这样的字母在底部被切掉。如图所示 最后一行中的所有“j”都与标签不符。这是否是已知的大小为Font:constrainedToSize:lineBreakMode:的bug?更重要的是,除了总是在标签

我在我的应用程序中使用了Georgia和Georgia粗体字体。因为它必须显示我从服务器下载的大量文本数据,所以我在应用程序的各个地方广泛使用了NSString的方法sizeWithFont:constrainedToSize:lineBreakMode:。问题是,它返回的值不太正确,像y、j和g这样的字母在底部被切掉。如图所示

最后一行中的所有“j”都与标签不符。这是否是已知的大小为Font:constrainedToSize:lineBreakMode:的bug?更重要的是,除了总是在标签高度上增加2个像素外,还有其他方法解决这个问题吗

这是我设置标签大小的行:

answerLabel.frame = CGRectMake(15, bottomOfRect(questionLabel.frame) + 10, frame.size.width - 45, [answer sizeWithFont:answerLabel.font constrainedToSize:CGSizeMake(frame.size.width - 45, CGFLOAT_MAX) lineBreakMode:NSLineBreakByWordWrapping].height);
我仔细检查以确保标签不在其superview的范围之外


我的目标是iOS 6和iOS 7。

改用
boundingRectWithSize:options:attributes:context:

查看本文了解更多详细信息:

改用
boundingRectWithSize:options:attributes:context:
。 查看此帖子了解更多详细信息:

尝试以下内容:

answerLabel.frame = CGRectMake(15, bottomOfRect(questionLabel.frame) + 10, frame.size.width - 45, ceilf([answer sizeWithFont:answerLabel.font constrainedToSize:CGSizeMake(frame.size.width - 45, CGFLOAT_MAX) lineBreakMode:NSLineBreakByWordWrapping].height));
问题是
sizeWithFont:constrainedToSize:lineBreakMode:
和较新的
boundingRectWithSize:options:attributes:context
都返回非整数大小,您需要将其四舍五入为整数大小,否则会出现较小的剪裁,因此请使用
ceilf()
尝试以下操作:

answerLabel.frame = CGRectMake(15, bottomOfRect(questionLabel.frame) + 10, frame.size.width - 45, ceilf([answer sizeWithFont:answerLabel.font constrainedToSize:CGSizeMake(frame.size.width - 45, CGFLOAT_MAX) lineBreakMode:NSLineBreakByWordWrapping].height));

问题是
sizeWithFont:constrainedToSize:lineBreakMode:
和较新的
boundingRectWithSize:options:attributes:context
都返回非整数大小,您需要将它们四舍五入为整数大小,否则会出现较小的剪裁,因此请使用
ceilf()

如果您的目标是iOS 7,则使用的是不推荐的方法。也许可以试试新的?最可能的原因是你没有正确地调整基线,但也可能是字体中的错误(是的,字体可能有错误;或者有时他们可能只是在方框外画图,声称这是一个功能)。首先,您能否解释一下如何执行绘图步骤(我怀疑存在错误,特别是如果您正在根据此值调整UILabel的大小)。但还要检查其他字体系列是否出现相同的错误。正如其他人所暗示的,如果您需要iOS7之前的版本,请告诉我们。我用其他信息更新了答案。在我检查过的其他字体系列中,我没有发现这个错误。如果您的目标是iOS 7,则使用的是不推荐的方法。也许可以试试新的?最可能的原因是你没有正确地调整基线,但也可能是字体中的错误(是的,字体可能有错误;或者有时他们可能只是在方框外画图,声称这是一个功能)。首先,您能否解释一下如何执行绘图步骤(我怀疑存在错误,特别是如果您正在根据此值调整UILabel的大小)。但还要检查其他字体系列是否出现相同的错误。正如其他人所暗示的,如果您需要iOS7之前的版本,请告诉我们。我用其他信息更新了答案。在我检查过的其他字体系列中,我没有发现这个错误。谢谢你的回答,但不幸的是,我必须以iOS 6+为目标。谢谢你的回答,但不幸的是,我必须以iOS 6+为目标。