iOS-Coretext富文本排版实现上下角标(Badge)

引入

关于 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];
相关文章
相关标签/搜索