iOS中字体Glyph Ascender和Descender之间的关系是什么?

时间:2014-03-25 22:15:10

标签: ios objective-c fonts

我正在使用UILabel(iOS7)中的字体,并且遇到了一些我希望有人可以解释的内容: 字体与字体之间的关系是什么?雕文,上升者和堕落者?

从我阅读的文件中,Ascender是基线上方字体的一部分,Descender是下面的部分(返回为负数)。合并的绝对值应该是字体的最大高度。

From Apple's documentation

例如,Ascender为255,Descender为-64,总高度为319。 但是,字形高度返回为228.4

编辑:这里是字形代码:

CTFontRef ctFont = CTFontCreateWithName((__bridge CFStringRef)(uiFont.fontName), uiFont.pointSize, NULL);
UniChar ch = [msgLabel.text characterAtIndex:0];
CGGlyph glyph;
if (CTFontGetGlyphsForCharacters (ctFont, &ch, &glyph, 1)) {
    CGRect bounds = CTFontGetBoundingRectsForGlyphs (ctFont, kCTFontOrientationDefault, &glyph, nil, 1);
    float glyphHeight = bounds.size.height;
}

这里是Ascender / Descender代码:

float adHeight = myLabel.font.ascender-myLabel.font.descender; //Descender is always a negative value

那么为什么从CTFontGetBoundingRectsForGlyphs返回的Glyph高度不等于Ascender加上Descender?

1 个答案:

答案 0 :(得分:1)

字体中的每个字形(字母形状)都是不同的大小和形状,对吧?字符'A'的字形高于字符'a'的字形,'t'字形的顶部再次不同。

Font.ascender是所有字母形状(字形)的最大值,Font.descender是最小值。

任何特定的字体都可能容易产生一个额外的高字形,这意味着Font.ascender值与不包含该字符的字符串的尺寸无关。