测量字符串的像素宽度

17

我需要在Cocoa Touch中测量字符串的像素宽度。有没有人能指向一个解释如何实现这一功能的链接呢?


5
当这个问题实际上是关于Mac OS X的Cocoa或iPhone OS的Cocoa Touch中的功能时,您不应该要求一个通用的Objective-C答案。Objective-C只是编程语言,Cocoa和Cocoa Touch都使用它。 - PeyloW
4
除了用于 Mac OS 或 IOS 的编程之外,Objective-C 还有其他的用途吗?如果有,那么它是否重要? - user4951
3个回答

27

在iPhone OS上,情况略有不同,您需要查看NSString UIKit Additions Reference。这个想法与Mac OS X的Cocoa相同,但是有更多的方法。

对于单行文本,请使用:

- (CGSize)sizeWithFont:(UIFont *)font 
              forWidth:(CGFloat)width 
         lineBreakMode:(UILineBreakMode)lineBreakMode

对于多行文本,请使用:

- (CGSize)sizeWithFont:(UIFont *)font 
     constrainedToSize:(CGSize)size 
         lineBreakMode:(UILineBreakMode)lineBreakMode

在处理单行文本时,使用 UILineBreakMode 作为参数可能会令人困惑,但这是因为换行符也被用来定义如何截断文本。


这对于通常的字体似乎运行良好,但对于像Zapfino这样的字体似乎无法给出精确的边界。示例代码位于http://paste.lisp.org/display/130803,输出屏幕截图位于http://ScrnSht.com/juixwk。有什么想法为什么会这样,以及如何解决它吗? - trss
在iOS7中已被弃用..文档中没有提到任何替代方法..有吗? - abbood
当前的iOS7文档(Xcode 5.0.1)确实提到了替换内容(这些内容往往只适用于iOS7)。 - JLundell
换行模式选项现在以NS开头。例如:NSLineBreakByWordWrapping。 - bret

5

8
关于如何实际使用boundingRectWithSize:options:attributes:,文档并不是非常清晰。如果你能添加一个关于如何使用这个方法来测量特定字体字符串的示例将会很好。 - PeyloW

0

上述解决方案现已过时。请查看iOS 7+的内容。

 sizeWithFont:constrainedToSize:lineBreakMode 

已经过时了。请使用以下代码片段:

UIFont *font=[UIFont fontWithName:@"Arial" size:16.f];

NSString *name = @"APPLE";

CGSize size = [name sizeWithAttributes:@{NSFontAttributeName:font}];

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