locationForGlyphAtIndex返回错误的值

时间:2015-05-27 23:30:37

标签: ios macos cocoa core-text textkit

我试图在NSLayoutManager中获取字形的位置,但在几个孤立的场合,我得到了似乎不正确的值。

例如:两个f一起在Helvetica Neue大小16中。第二个f的x值应该在4左右,但我得到9.232000 .. ?有谁知道这是为什么?

NSString *lettersString = @"ff";
NSDictionary *attrsDictionary = @{
    NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue" size:16]
};

NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:lettersString attributes:attrsDictionary];
NSTextStorage *textStorage = [[NSTextStorage alloc] initWithAttributedString:attributedString];

NSLayoutManager *layoutManager = [[NSLayoutManager alloc] init];
[textStorage addLayoutManager:layoutManager];
NSTextContainer *textContainer = [[NSTextContainer alloc] initWithSize:CGSizeMake(100, 100)];
textContainer.lineFragmentPadding = 0;

[layoutManager addTextContainer:textContainer];

CGPoint location = [layoutManager locationForGlyphAtIndex:1];

// location.x == 9.232000

1 个答案:

答案 0 :(得分:1)

解决!除非在字符串属性中明确禁用,否则iOS会自动解析连字(一个或多个字母作为单个字形连接)。

因此,此示例中的ff字符将转换为\uniFB00处的单个字符 - 这当然更宽。