我试图在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
处转换为单个字符-当然更宽。
关于ios - locationForGlyphAtIndex返回错误的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30494837/