NSLog 显示 "treble clef" unicode,但 UILabel 不显示



我试图在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 字符缺少什么?

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

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

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

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

如果无法做到这一点,您可以尝试使用带有高音谱号内联图像的NSAttributedString

  • 不得不研究支持高音谱号的字体,正如皮特克里斯蒂安(给他一分)所说。http://www.fileformat.info/info/unicode/char/1d11e/fontsupport.htm喜欢的符号:http://users.teilar.gr/~g1951d/Symbola.zip
  • 解压缩文件并将其拖动到 Xcode:支持文件。已将其捆绑到目标中。
  • 确保在构建阶段:复制捆绑资源。
  • 还必须放入 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*) @"\U0001d11e" drawInRect:CGRectMake(50+10, 50-15, 80, 20) withFont:[UIFont boldSystemFontOfSize:100]];

  • 要拿出 unicode 来标记:(这里仍然有问题)

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

最新更新