任何人都可以解释一下,如何使用Core Text绘制上标和下标字母?
感谢。
答案 0 :(得分:1)
我注意到这个问题有点陈旧,我希望你仍然需要这方面的帮助,这篇文章会对你有帮助。
您可以使用NSAttributedString(或其可变对应的NSMutableAttributedString)将不同的属性(例如字体,名称和大小)分配给单个字符串的特定范围。
核心文本本身不支持上标和下标,为了使它们看起来很好,您可能需要做很多工作。幸运的是,Oliver Drobnik开发了一个来自可可遗传学的开源项目,它允许您轻松地将HTML转换为NSAttributedString(或NSMutableAttributedString),将其提供给自定义textview并显示上标和下标(以及许多其他HTML和CSS),因为它们会出现在UIWebview中,但不需要使用UIWebview。您可以从here下载项目。
虽然已经为这个项目付出了很多努力,但有两点需要注意:
答案 1 :(得分:0)
如果NSAttributedString是可接受的解决方案,您可以使用NSAttributedString而不是Core Text创建上标/下标效果。我就这样做了:
NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:myString];
// Everything except the first character is rendered with the regular size / position
[str addAttribute:NSFontAttributeName
value:font
range:NSMakeRange(1, [amountString length]-1)]; // Everything except the first character is rendered with the regular size / position
// First character is 5/8 normal size
[str addAttribute:NSFontAttributeName
value:[UIFont fontWithName:initialFont.fontName
size:initialFont.pointSize/8*5]
range:NSMakeRange(0, 1)];
// Set the baseline offset to push the first character into a superscript position
[str addAttribute:@"NSBaselineOffset"
value:[NSNumber numberWithFloat:initialFont.pointSize*1/3]
range:NSMakeRange(0, 1)];
关键行是最后两行,它们使超/子脚本文本的大小变小并改变它的垂直位置。值得注意的是,我使用的是字符串(@“NSBaselineOffset”)而不是定义的属性名称常量(NSBaselineOffsetAttributeName)。从我能够收集的内容来看,我相信NSBaselineOffsetAttributeName是在Mac的库中定义的,而不是在iOS中定义的(当我提出这个时,我正在开发它)。结果我使用名称字符串本身而不是属性名称的常量。