如何在iOS中创build不使用Unicode的下标字符
我一直在尝试一段时间来创build一个NSString的下标字符没有成功。 是否有可能在iOS中做到这一点?
我需要一种方法来将string中的字符更改为下标或上标,并且由于Unicode不具有所有字母,因此无法使用Unicode。
我的猜测可能是使用HTML标签<sub>
和<sup>
但我没有find一种方法将所述HTML标签转换为NSString。
下标和上标不是性格特征。 除了less数例外(例如,²,³,ª),这是常规字符呈现的方式 – 以较小的字体和常规字符的基线之上/之下。 考虑到这一点,你不能有一个带有下标字符的“NSString”,不过你可以有一个带有粗体或斜体字符的NSString。
因此,除非已经在Unicode中存在所需的下标字符,否则将在string渲染上创build下标和上标,而不是在string创build上创build。 这不是iOS的限制,这是在现代计算机中处理string的方式的限制。
你对那个NSString做什么? 你在UILabel上显示吗? 你通过networking发送? 你把它呈现为HTML吗? 请注意, <sub>
和<sup>
是HTML标签; 除非NSString被特别解释为HTML(例如,通过UIWebView),否则它们不会被解释为sup / superscript。
我无法获得NSSuperscriptAttributeName的工作,但有以下成功:
UILabel *label = [[UILabel alloc] init]; NSString *string = @"abcdefghi"; NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:string]; NSInteger num1 = 1; CFNumberRef num2 = CFNumberCreate(NULL, kCFNumberNSIntegerType, &num1); [attrString addAttribute:(id)kCTSuperscriptAttributeName value:(id)num2 range:NSMakeRange(4,2)]; label.attributedText = attrString; [attrString release];
这给你:
通过label.attributedText为属性string分配标签是6.0的新增function,但设置属性string的方式可能适用于早期版本的iOS。
发送一个负值给kCTSuperscriptAttributeName给你一个下标。
不要忘记添加CoreText框架。
有一个组件可以做到,通过NSString和UILabel上的一些类别。 虽然这可能是你的情况矫枉过正:
NSString *stringWithTags = @"<b>Bold</b> <sup>sup</sup> <sub>sub</sub> <u>Under</u> <strike>strike</strike> <i>Italic</i> <small>small</small> <b><u>U+B</u></b>"; NSAttributedString *attributedString = [[RCTagProcessor defaultInstance] attributedStringForText:stringWithTags];
或者你可以马上在标签上设置文字:
[self.label rc_setTaggedText:stringWithTags];