locationForGlyphAtIndex 返回错误值
locationForGlyphAtIndex returning wrong value
我正在尝试获取 NSLayoutManager
中字形的位置,但在一些孤立的情况下,我得到的值似乎不正确。
例如:Helvetica Neue 大小 16 中的两个 f
在一起。第二个 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
已解决! iOS 自动解析连字(一个或多个字母连接为一个字形),除非在字符串属性中明确禁用。
因此本例中的 ff
个字符在 \uniFB00
处被转换为单个字符 - 当然更宽。
我正在尝试获取 NSLayoutManager
中字形的位置,但在一些孤立的情况下,我得到的值似乎不正确。
例如:Helvetica Neue 大小 16 中的两个 f
在一起。第二个 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
已解决! iOS 自动解析连字(一个或多个字母连接为一个字形),除非在字符串属性中明确禁用。
因此本例中的 ff
个字符在 \uniFB00
处被转换为单个字符 - 当然更宽。