代码之家  ›  专栏  ›  技术社区  ›  Corey Floyd

如何使用NSAttributedString创建下标

  •  6
  • Corey Floyd  · 技术社区  · 16 年前

    示例:H2O

    2 回复  |  直到 16 年前
        1
  •  5
  •   Peter Hosey    16 年前

    尝试 NSSuperscriptAttributeName 具有负值。

        2
  •  2
  •   Christian J. B.    13 年前

    我在NSMutableAttributedString中挣扎了一段时间,因为最基本的解决方案需要为每个要下标的字符输入NSRange。肯定有更自动的做事方式吗?

    NSArray *substrings = [string componentsSeparatedByString:@"%"];
    

    将字符串切分为由%符号分隔的子字符串,例如。

    然后我检查数组中每个元素的第一个字符,看它是否包含&标记,我用它来表示下一个字符是B=粗体,S=上标,I=斜体等等。

    你好吗 你好吗

    所有字体修改都使用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 etc.方法是用户创建的方法,这些方法将NSString转换为格式为粗体/上标/下标/etc.NSMutableAttributeString,然后将其附加到变量“attribString”中。