Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何计算Objective-C/Cocoa中字符串的bouding rect?_Objective C_Cocoa - Fatal编程技术网

如何计算Objective-C/Cocoa中字符串的bouding rect?

如何计算Objective-C/Cocoa中字符串的bouding rect?,objective-c,cocoa,Objective C,Cocoa,使用Objective-C/Cocoa如何计算基于特定字体绘制字符串所需的宽度和高度?在C#/.Net中,您可以这样做: SizeF textSize = graphics.MeasureString(someString, someFont); Objective-C/Cocoa中有类似的功能吗?您使用的是NSString的方法。正如Danielpunkas所说,一种方法是。另一种方法是创建一个NSAttributedString,并要求它提供其属性。唯一的区别是,一种方法将文本和属性一起提

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

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

Objective-C/Cocoa中有类似的功能吗?

您使用的是
NSString
的方法。

正如Danielpunkas所说,一种方法是。另一种方法是创建一个NSAttributedString,并要求它提供其属性。唯一的区别是,一种方法将文本和属性一起提供给对象(属性字符串),而另一种方法将它们分开。

以下代码与我用于跨平台文本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。

以下是一个基于Danielpunkas和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语法看起来非常陌生的地方,而且苹果公司没有在他们的Cocoa文档中嵌入太多的示例代码,学习这些东西有点困难。

如果你使用演示者,例如
UILabel
/
NSLabel
(而不是要求字符串自己绘制)。那么你应该问这个物体正确的尺寸


有关详细分析,请参阅。

Ohh在iOS6下,您可以通过以下方式获得正确的大小:

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

+[NSDictionary Dictionary WithObjects和Keys:]:每对中的第二个对象必须为非零。或者,您是否忘记零终止参数列表?没有NSLabel。UILabel的Cocoa对应项是NSTextField(禁用了带边框的
可编辑的
)。