如何计算Objective-C / Cocoa中字符串的边界矩形?

时间:2009-03-04 01:11:56

标签: objective-c cocoa

使用Objective-C / Cocoa如何根据特定字体计算绘制字符串所需的宽度和高度?在C#/ .Net中你可以这样做:

SizeF textSize = graphics.MeasureString(someString, someFont);

Objective-C / Cocoa中是否有类似的内容?

6 个答案:

答案 0 :(得分:13)

以下是基于danielpunkass和Peter Hosey给出的答案的具体示例:

NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:[NSFont fontWithName:@"Helvetica" size:12], NSFontAttributeName, nil];
NSAttributedString *text = [[NSAttributedString alloc] initWithString:@"Hello" attributes: attributes];
NSSize textSize = [text size];

对于像我这样的Objective-C / Cocoa新手来说,一个例子确实有很长的路要走。如果您来自C ++ / Java / C#或者任何Objective-C语法都可以显得非常外来,并且因为Apple在Cocoa文档中没有嵌入太多的示例代码,那么学习这些东西有点困难。

答案 1 :(得分:7)

以下代码与我用于跨平台文本CALayer的代码类似:

#if defined(TARGET_IPHONE_SIMULATOR) || defined(TARGET_OS_IPHONE)
    UIFont *theFont = [UIFont fontWithName:fontName size:fontSize];
    CGSize textSize = [text sizeWithFont:theFont];
#else
    NSFont *theFont = [NSFont fontWithName:fontName size:fontSize];
    CGSize textSize = NSSizeToCGSize([text sizeWithAttributes:[NSDictionary dictionaryWithObject:theFont forKey: NSFontAttributeName]]);
#endif

这为您提供了一个名为text的NSString的CGSize,其字体名称为fontName,大小为fontSize。

答案 2 :(得分:6)

danielpunkass说,其中一种方式是sizeWithAttributes:。另一种方法是创建一个NSAttributedString并询问它的size。唯一的区别是,一种方式为您提供了一个具有文本和属性的对象(属性字符串),而另一种方式将它们分开。

答案 3 :(得分:4)

您使用NSString的{​​{3}}方法。

答案 4 :(得分:0)

如果您使用演示者,例如UILabel / NSLabel(而不是要求字符串绘制自己)。那么你应该问这个对象的大小是否正确。

有关详细分析,请参阅Mike Weller's blog about labels

答案 5 :(得分:0)

哦,在iOS6下你可以通过这种方式得到正确的尺寸:

CGSize textSize = [theString sizeWithFont:theFont
                             forWidth:160.0f
                        lineBreakMode:NSLineBreakByWordWrapping];