sizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode:方法未返回正确的CGSize。

3
除非我读错了文档,否则似乎这个方法sizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode:没有返回正确的CGSize。以下是示例代码。
NSString *someText = @"$";
CGFloat actualFontSize;
CGSize textSize = [someText sizeWithFont:[UIFont fontWithName:@"Futura-CondensedMedium" size:100.0] minFontSize:1.0 actualFontSize:&actualFontSize forWidth:10.0 lineBreakMode:UILineBreakModeClip];
textSize返回的高度是在字体大小为100.0时的高度,而不是新的缩小字体大小时的高度。
如果您想要实际的字体大小,请使用actualFontSize并执行sizeWithFont:forWidth:lineBreakMode::
CGSize newTextSize = [someText sizeWithFont:[UIFont fontWithName:@"Futura-CondensedMedium" size:actualFontSize] forWidth:10.0 lineBreakMode:UILineBreakModeClip];

现在newTextSize将包含正确的高度。
有其他人遇到过这个问题吗?

是的,我有同样的问题。我必须再次调用sizeWithFont并使用实际字体大小重新计算真实文本高度,就像你所做的那样。 - dmarnel
我建议使用字符串@"Ay"作为一般参考,以获取更或少的行高度测量。 - mojuba
1个回答

1
问题出在你的宽度上。因为你把最小字体设定为1.0像素,而宽度只有10.0,你的文字大小会自动调整到适合你自己设置的10.0宽度的较低文字大小。
CGSize textSize = [someText 
sizeWithFont:[UIFont fontWithName:@"Futura-CondensedMedium" size:100.0] 
minFontSize:1.0   //the troublemaker
actualFontSize:&actualFontSize 
forWidth:10.0     //the troublemaker 
lineBreakMode:UILineBreakModeClip];

你发布的另一个将返回正确的大小,因为你没有设置最小textFont并且你的宽度恰到好处。

CGSize newTextSize = [someText 
sizeWithFont:[UIFont fontWithName:@"Futura-CondensedMedium" 
size:actualFontSize] 
forWidth:currencyRect.size.width //probably not 10 pixels wide
lineBreakMode:UILineBreakModeClip];

抱歉,我已经更新了我的问题。它们都是10像素宽,我希望它能自动调整到较小的文本大小。但我也希望返回的CGSize反映实际调整后的大小,目前它还没有做到这一点。 - pixelfreak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接