我试图在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";