我想有一个应用程序包括一个自定义字体渲染文本,加载它,然后使用它与标准UIKit元素如UILabel。这可能吗?


当前回答

iOS 3.2及后续版本支持此功能。直接摘自iPhone OS 3.2新增功能文档:

自定义字体支持 想要使用自定义字体的应用程序现在可以将这些字体包含在他们的应用程序包中,并通过在他们的信息中包含UIAppFonts键向系统注册这些字体。plist文件。该键的值是一个字符串数组,用于标识应用程序bundle中的字体文件。当系统看到键时,它加载指定的字体并使它们对应用程序可用。

一旦字体设置在信息。plist,您可以使用您的自定义字体作为任何其他字体在IB或编程。

苹果开发者论坛上有一个正在进行的话题: https://devforums.apple.com/thread/37824(需要登录)

这里有一个优秀而简单的三步教程,教你如何做到这一点(断开的链接被删除)

将您的自定义字体文件添加到您的项目中,使用Xcode作为资源 为你的信息添加一个键。名为UIAppFonts的plist文件。 将该键设置为数组 对于你拥有的每种字体,输入字体文件的全名(包括扩展名)作为UIAppFonts数组的项 保存Info.plist 现在在你的应用程序中,你可以简单地调用[UIFont fontWithName:@"CustomFontName" size:12]来获得自定义字体来使用你的UILabels和UITextViews等…

另外:确保字体在复制包资源中。

其他回答

这是如何做这件事的一步一步的说明。不需要额外的库或任何特殊的编码。

http://shang-liang.com/blog/custom-fonts-in-ios4/

大多数时候问题在于字体而不是方法。最好的方法是使用一种肯定有效的字体,比如verdana或geogia。然后更改为想要的字体。如果它不起作用,可能是字体名称不正确,或者字体格式不正确。

虽然上面的一些答案是正确的,但我已经为那些仍然对字体有问题的人写了一个详细的可视化教程。

上面的解决方案告诉你将字体添加到plist并使用

[self.labelOutlet setFont:[UIFont fontWithName:@"Sathu" size:10]];

都是正确的。现在请使用任何其他的黑客方式。如果您仍然面临查找字体名称和添加它们的问题,这里是教程-

在ios应用程序中使用自定义字体

作为一个增强@bdev的答案,这里是一个更新版本列出自定义字体。

步骤1:使用@bdev的答案找出所有系统字体并保存到文件中。

将以下代码放在第一个视图控制器的-(void)viewDidLoad中,在[super viewDidLoad]之后(或在App Delegate中):

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                     NSUserDomainMask, YES);
NSMutableArray *system_fonts = [NSMutableArray array];
for (NSString *familyName in [UIFont familyNames]) {
    for (NSString *fontName in [UIFont fontNamesForFamilyName:familyName]) {
        [system_fonts addObject:fontName];
    }
}
if([paths count] > 0) {
    [system_fonts writeToFile:[[paths objectAtIndex:0]
                               stringByAppendingPathComponent:@"array.out"] atomically:YES];
}

运行应用程序一次。事后停止。

步骤2:添加自定义字体到项目

使用已接受的答案中显示的方法,添加您的自定义字体(记得更新.plist并通过勾选add to Target添加要构建的字体文件。

步骤3:将系统字体与当前字体列表进行比较

将步骤1中的代码替换为:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                     NSUserDomainMask, YES);
NSMutableArray *system_fonts = [NSMutableArray arrayWithContentsOfFile:[[paths objectAtIndex:0]
                                                                        stringByAppendingPathComponent:@"array.out"]];

for (NSString *familyName in [UIFont familyNames]) {
    for (NSString *fontName in [UIFont fontNamesForFamilyName:familyName]) {
        if (![system_fonts containsObject:fontName]) {
            NSLog(@"%@", fontName);
        }
    }
}

运行App,你添加的自定义字体列表就会显示出来。

这适用于iOS 3.2到iOS 6(未来的版本可能会正常工作)。也适用于.ttc和.ttf。

更好的解决方案是在你的信息中添加一个新的属性“应用程序提供的字体”。plist文件。

然后,你可以使用你的自定义字体像正常的UIFont。

您可以在资源文件夹中添加所需的“FONT”文件。然后转到项目信息。plist文件,并使用键“Fonts provided by the application”和值“FONT NAME”。

然后你可以调用方法[UIFont fontwithName:@"FONT NAME" size:12];