【问题标题】:Measuring the pixel width of a string测量字符串的像素宽度
【发布时间】:2010-11-28 23:08:02
【问题描述】:

我需要在 Cocoa Touch 中测量一个字符串的像素宽度。谁能给我一个链接来解释如何做到这一点?

【问题讨论】:

  • 当这个问题真的是关于 Cocoa for Mac OS X 或 Cocoa Touch for iPhone OS 的功能时,你不应该要求一个通用的 Objective-c 答案。 Objective-C 只是 Cocoa 和 Cocoa Touch 都使用的编程语言。
  • objective-c 除了为 Mac OS 或 IOS 编程还有其他用途吗?如果是,那么重要吗?

标签: cocoa-touch graphics nsstring width


【解决方案1】:

上述解决方案现已弃用。为 iOS 7+ 检查这个

 sizeWithFont:constrainedToSize:lineBreakMode 

现在已弃用。使用下面的代码sn-p,

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

NSString *name = @"APPLE";

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

【讨论】:

    【解决方案2】:

    在 iPhone OS 上略有不同,请查看NSString UIKit Additions Reference。这个想法与 Cocoa for Mac OS X 中的想法相同,但方法更多。

    对于单行文本使用:

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

    对于多行文本使用:

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

    使用UILineBreakMode 作为单行文本的参数可能会造成混淆,但这是因为换行符也用于定义如何截断文本。

    【讨论】:

    • 这似乎适用于普通字体,但它似乎没有为 Zapfino 等字体提供确切的界限。示例代码位于paste.lisp.org/display/130803,输出屏幕截图位于ScrnSht.com/juixwk。知道为什么以及如何解决它吗?
    • 在 iOS7 中已弃用.. 文档没有提到任何替代品.. 有吗?
    • 当前的 iOS7 文档 (Xcode 5.0.1) 确实提到了替代品(往往仅限于 iOS7)。
    • lineBreakMode 选项现在以 NS 开头。例如NSLineBreakByWordWrapping
    【解决方案3】:

    看看NSString Application Kit Additions Reference,特别是boundingRectWithSize:options:attributes:。该例程返回的值应该为您提供NSString 的宽度。

    【讨论】:

    • 文档对如何实际使用boundingRectWithSize:options:attributes: 不是很清楚。如果您可以添加一个示例,说明如何实际使用此方法来测量具有特定字体的字符串,那就太好了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-16
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-14
    • 2020-04-22
    相关资源
    最近更新 更多