我看到NSAttributedString有一个上标的特定属性,但我找不到一个下标。使用NSAttributedString创建下标字符的一般做法是什么?
示例:H2O
答案 0 :(得分:5)
尝试使用负值NSSuperscriptAttributeName
。
如果做不到这一点,那就很难用字符串中的[Ο1225 5]替换[0123456789]字符。
答案 1 :(得分:2)
我努力使用NSMutableAttributedString中的下标/上标一段时间,因为最基本的解决方案需要为每个想要下标的字符输入NSRange。当然,有一种更自动的做事方式吗?
嗯,是的,但它需要一点点工作。
我的方法是在NSString中指明下标,上标,斜体等字符,方法是用%符号包围要改变的文本,然后是关于应该进行什么类型的字体调整的信息,例如: '第二个粒子上的力由f-subscript-b'将在我的计划中写出@"第二个粒子上的力由f%& sb%"给出。
然后我使用方便的方法:
NSArray *substrings = [string componentsSeparatedByString:@"%"];
将字符串切割成由%符号分隔的子字符串,例如
@" Hello%& Bhow是%?" - >包含元素的数组:@" Hello",@"& Bhow是",@"你?"
然后我检查数组中每个元素的第一个字符,看它是否包含& mark,我用来表示下一个字符是B = Bold,S = Superscript,I = italics等。因此,在上面的例子中,子串@"& Bhow是"旨在转换为粗体字符串" 如何"输入@" Hello%& Bhow是%?"是否打算转换为"您好如何您?"。
所有字体修改都是使用NSMutableAttributedString及其相关方法执行的,最后所有NSMutableAttributedString子字符串都可以使用&appendAttributedString'等方法粘贴在一起。
如果有人感兴趣,我的代码如下:
-(void) appendFontString:(NSMutableAttributedString*) attribString
:(NSString*) string{
NSArray *substrings = [string componentsSeparatedByString:@"%"];
for(int i=0;i<(int) [substrings count];i++){
if([substrings[i] length]>0){
NSString* firstCharacter=[substrings[i] substringToIndex:1];
if([firstCharacter isEqualToString:@"&"]){
NSString* fontType=[substrings[i] substringWithRange:NSMakeRange(1, 1)];
//remove first two characters
NSString* newSubString=[substrings[i] substringFromIndex:2];
if([fontType isEqualToString:@"S"]){
[self appendWithSuperscript:attribString :newSubString];
} else if([fontType isEqualToString:@"s"]){
[self appendWithSubscript:attribString :newSubString];
} else if([fontType isEqualToString:@"B"]){
[self appendWithBold:attribString :newSubString];
} else if([fontType isEqualToString:@"I"]){
[self appendWithItalics:attribString :newSubString];
}
} else{
//regular string
[self append:attribString :substrings[i]];
}
}
}
}
其中appendWithBold等方法是用户创建的方法,它将NSString转换为格式化的粗体/上标/下标/等。 NSMutableAttributedString然后将其附加到变量&#39; attribString&#39;。
我可能不是最好的方法,但至少它表明,通过一些工作,你可以在Cocoa中自动化下标和上标。