如何创建与NSAttributedString标
-
25-09-2019 - |
题
我看到NSAttributedString具有用于标特定属性,但我不能找到一个为下标。什么是使用NSAttributedString创建一个标字符一般的做法?
实施例:H 2 O
解决方案
尝试NSSuperscriptAttributeName
具有负值。
否则,硬盘的方式将是在字符串中替换[0123456789]与[₀₁₂₃₄₅₆₇₈₉]字符。
其他提示
我在NSMutableAttributedString标/上标挣扎了一段时间,因为最基本的解决方案要求输入NSRange为每要标每一个字符。肯定有做事情的更自动化的方式?
恩,是有,但它需要的工作一点点。
我的方法是指示哪些随后信息上应进行什么类型的字体调整被下标,上标,斜体等在由NSString的包围文本与%符号被改变的字符,例如“在第二粒子的力由F-标-B给出”将在我的方案被写入@
“在第二粒子的力为f%SB%给出”我然后使用便利方法:
NSArray *substrings = [string componentsSeparatedByString:@"%"];
砍串入由%的迹象,例如分隔子串
@ “你好%Bhow是%吗?” - >含有该数组元素:@ “你好”,@ “&Bhow是”,@ “?你”
我然后检查阵列的每个元件的第一个字符,以查看它是否包含一个与标记,我使用以表示下一个字符将或者B =粗体,S =标,I =斜体等
因此,在上文中,子串@示例中的“&Bhow是”意在被转换成粗体字符串“如何是强>”和输入@“你好%Bhow是%你?”旨在转变为 “Hello 如何吗?”。
字体修改的所有使用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然后将其附加到可变“attribString”。
矿可能不是最好的方法,但它至少证明用一些工作可以自动和下标可可superscripting。