关于 Coretext 排版 我在以前的记录中提到过,基础使用不说了,简单说下关于角标问题,在排版中,遇到方程式相似的,就要实现角标渲染;html
目标效果:字体
对于角标的设置,不少文章说是经过添加如下属性实现spa
///上标 dic[(id)kCTSuperscriptAttributeName] = [NSNumber numberWithInteger:1]; ///下标 dic[(id)kCTSuperscriptAttributeName] = [NSNumber numberWithInteger:-1];
可是试了几回,依旧不行,而后研究了关于排版字体的一些UIFont属性code
familyName 字体家族的名字
fontName 字体的名字
pointSize 字体大小
ascender 基准线以上的高度
descender 基准线如下的高度
capHeight 大小的高度
xHeight 小写x的高度
lineHeight 当前字体下的行高
leading 行间距(通常为0)
最终经过设置基准线,可实现上下标,通常角标字体大小为font字体大小的2/3htm
上角标blog
NSString * fontFamily = textFont.familyName;//字体集 UIFont *badgeFont = [UIFont fontWithName:fontFamily size:fontSize * 2 / 3]; CGFloat baselineOffset = textFont.ascender - (fabs(badgeFont.descender) + badgeFont.ascender) / 2-3.0;
CFStringRef badgeFontName = (__bridge CFStringRef)badgeFont.fontName; fontRef = CTFontCreateWithName((CFStringRef)badgeFontName, fontSize * 2 / 3, NULL); ///设置角标属性 dic[(id)kCTBaselineOffsetAttributeName]= (id)[NSNumber numberWithFloat:baselineOffset];
下角标ip
NSString * fontFamily = textFont.familyName;//字体集 UIFont *badgeFont = [UIFont fontWithName:fontFamily size:fontSize * 2 / 3]; CGFloat baselineOffset = textFont.descender; CFStringRef badgeFontName = (__bridge CFStringRef)badgeFont.fontName; fontRef = CTFontCreateWithName((CFStringRef)badgeFontName, fontSize * 2 / 3, NULL); ///设置角标属性 dic[(id)kCTBaselineOffsetAttributeName]= (id)[NSNumber numberWithFloat:baselineOffset];