NSString上下标

直接上图


NSString上下标.png

使用NSMutableAttributedString的NSBaselineOffsetAttributeName属性

+ (NSMutableAttributedString *)attributedStringWithString:(NSString *)string
                                              startRanges:(NSArray *)startRanges
                                                endRanges:(NSArray *)endRanges
                                                    fonts:(NSArray *)fonts
                                                   colors:(NSArray *)colors
                                           baselineOffsets:(NSArray *)baselineOffsets
{
    NSMutableAttributedString * attriString = [[NSMutableAttributedString alloc] initWithString:string];
    
    for ( int i = 0; i < fonts.count; i++ )
    {
        UIFont * font = [UIFont systemFontOfSize:10];
        
        if ( [fonts[i] isKindOfClass:[NSString class]] )
        {
            NSString * fontStr = fonts[i];
            font = [UIFont systemFontOfSize:fontStr.floatValue];
        }
        else
        {
            font = fonts[i];
        }
        
        UIColor * color = [UIColor blackColor];
        
        if ( [colors[i] isKindOfClass:[NSString class]] )
        {
            NSString * colorStr = colors[i];
            color = [self colorWithHexString:colorStr];
        }
        else
        {
            color = colors[i];
        }
        
        NSNumber * startIndex = startRanges[i];
        NSNumber * endIndex = endRanges[i];
        NSRange range = NSMakeRange( startIndex.floatValue, endIndex.floatValue);
        NSNumber * baselineOffset = baselineOffsets[i];
        
        [attriString addAttributes:@{
                                     NSFontAttributeName:font,
                                     NSForegroundColorAttributeName:color,
                                     NSBaselineOffsetAttributeName : baselineOffset
                                     }
                             range:range];
    }
    
    return attriString;
}


+ (UIColor *)colorWithHexString:(NSString *)hexString {
    
    unsigned int red,green,blue;
    NSRange range;
    range.length = 2;
    range.location = 0;
    [[NSScanner scannerWithString:[hexString substringWithRange:range]]scanHexInt:&red];
    range.location = 2;
    [[NSScanner scannerWithString:[hexString substringWithRange:range]]scanHexInt:&green];
    range.location = 4;
    [[NSScanner scannerWithString:[hexString substringWithRange:range]]scanHexInt:&blue];
    return [UIColor colorWithRed:(float)(red/255.0f)green:(float)(green / 255.0f) blue:(float)(blue / 255.0f)alpha:1.0f];
}

PS:里面的colorWithHexString方法,一般你们自己写就行了

用法

    NSString * one = @"1234";
    NSString * two = @"56";
    NSString * three = @"789";
    NSString * four = @"abc";
    
    NSString * string = [NSString stringWithFormat:@"%@%@%@%@",one, two, three, four];
    NSArray * startRanges = @[@(0), @(one.length), @(one.length + two.length), @(one.length + two.length + three.length)];
    NSArray * endRanges = @[@(one.length), @(two.length), @(three.length), @(four.length)];
    NSArray * fonts = @[@"20", @"10", @"25", @"10"];
    NSArray * colors = @[@"373737", @"123456", @"F52826", @"A57585"];
    NSArray * baselineOffsets = @[@0, @10, @0, @0];
    
    NSMutableAttributedString * attributedString = [APPTheme attributedStringWithString:string
                                                                            startRanges:startRanges
                                                                              endRanges:endRanges
                                                                                  fonts:fonts
                                                                                 colors:colors
                                                                        baselineOffsets:baselineOffsets];
    self.label.attributedText = attributedString;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 注意:所有参数基于JDK7和JDK8提取(java -XX:+PrintFlagsFinal -version),...
    阿飞的博客阅读 17,758评论 3 11
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,280评论 19 139
  • 一、关于AttributedString 在iOS开发过程中系统简单的封装工具已经不够我们使用,为了更好的开发,苹...
    iceMaple阅读 11,884评论 2 31
  • 今天花了一天的时间来看forge,做的过程中发现了不少问题,实现了一个简单模型的可视化 总结: 1、走了不少弯路,...
    没手指的蓝胖子阅读 6,174评论 0 1
  • 你們倒要愛仇敵,也要善待他們,並要借給人不指望償還,你們的賞賜就必大了,你們也必作至高者的兒子;因為他恩待那忘恩的...
    YNC再寫一篇阅读 748评论 0 1

友情链接更多精彩内容