sizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode:没有返回正确的CGSize

时间:2011-10-23 04:36:14

标签: iphone objective-c ios ipad

除非我正在阅读文档错误,否则这个方法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将包含正确的高度。

其他人遇到过这个?

1 个答案:

答案 0 :(得分:1)

问题是你的宽度。因为您已将最小字体设置为1.0像素而宽度仅设置为10.0,所以textSize将自动调整为适合您自己设置的10.0宽度的较低textSize。

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];