NSLog显示"高音谱号" unicode,但UILabel没有

时间:2016-01-15 04:29:31

标签: objective-c xcode unicode

我试图展示"高音谱号"在UILabel,但它不起作用。但是,NSLog能够显示它。

NSString *strM = @"\U0001d11e";
NSLog(@"treble clef works: %@",strM); //works
NSLog(@"works: "); //works

UILabel *lbl = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 50)];
[self.view addSubview:lbl];
lbl.text = strM; //shows "empty" or (box around a question mark)

UILabel中显示该Unicode字符我缺少什么?

2 个答案:

答案 0 :(得分:1)

由于Xcode碰巧使用的字体具有高音谱号字符的字形,因此它显示在NSLog消息中。

但是,UILabel使用的字体并不包含该特定Unicode字符的字形。这就是为什么你在问号周围看到一个"框。"

如果你尝试使用更常见的Unicode字符,你会发现代码本身没有问题。

一种选择是切换到支持该特定字符的其他字体。

如果不可能,你可以试试高音谱号的use an NSAttributedString with an inline image

答案 1 :(得分:0)

  • 不得不调查支持Treble Clef的字体作为PetehChristian(给他一点)说。 http://www.fileformat.info/info/unicode/char/1d11e/fontsupport.htm 喜欢Symbola:http://users.teilar.gr/~g1951d/Symbola.zip
  • 解压缩文件并将其拖至Xcode:Supporting Files。 将它捆绑到目标中。
  • 确保在BuildPhases:Copy Bundle Resources。
  • 还要放入Info.plist:add(由...提供的字体) 应用)。并添加文件:Symbola.ttf。
  • 然后验证了字体在系统中:

    NSArray *fontFamilies = [UIFont familyNames];
    for (int i = 0; i < [fontFamilies count]; i++)
    {
        NSString *fontFamily = [fontFamilies objectAtIndex:i];
        NSArray *fontNames = [UIFont fontNamesForFamilyName:[fontFamilies objectAtIndex:i]];
        NSLog (@"%@: %@", fontFamily, fontNames);
    }
    
  • 子类UIView :(这对我来说最好)

    [(NSString *)@&#34; \ U0001d11e&#34; drawInRect:CGRectMake(50 + 10,50-15,80,20)withFont:[UIFont boldSystemFontOfSize:100]];

  • 将unicode输出到标签:(仍然在这里发布)

    [lbl setFont:[UIFont fontWithName:@"Symbola.ttf" size: 40]];
    lbl.text = @"\U0001D11E";