将NSNumber格式化为上标或下标unicode字符

时间:2015-01-15 15:22:56

标签: unicode nsstring string-formatting nsnumber

Unicode包括上标字符,例如“⁰¹²³⁴⁵⁶⁷⁸⁹”以及下标:“₁12 3 45 5”。我想将数字格式化为超数或下标数字 - 我认为在UILabelUITextField中使用它应该没问题。

具体来说,我不想使用NSAttributedString

感谢。

1 个答案:

答案 0 :(得分:0)

我在NSString上添加了一个类别,但在使用之前阅读了以下内容。

-(NSString*) asSuperscript
{
    return [self tranformWithMap:
            @{
              @"0": @"⁰",
              @"1": @"¹",
              @"2": @"²",
              @"3": @"³",
              @"4": @"⁴",
              @"5": @"⁵",
              @"6": @"⁶",
              @"7": @"⁷",
              @"8": @"⁸",
              @"9": @"⁹"
              }];
}

-(NSString*) tranformWithMap: (NSDictionary *) map
{
    NSString *output = self;

    for (NSString *from in map.allKeys)
    {
        output = [output stringByReplacingOccurrencesOfString: from withString: map[from]];
    }

    return output;
}

上面的实现是非常低效的,但是会用于短字符串 - 嘿,计算机很快,对吗?

但是,在iOS 上,我需要这个,系统字体的上标字符看起来很糟糕。特别是“123”的字符不会与“0456789”垂直对齐,这些都是更高的!