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


当前回答

编辑:从iOS 3.2开始,这个功能是内置的。如果您需要支持3.2版本,您仍然可以使用这个解决方案。

我创建了一个扩展UILabel并处理加载.ttf文件的简单模块。我在Apache许可下发布了它,并把它放在github这里。

重要的文件是FontLabel.h和FontLabel.m。

它使用了Genericrich回答中的一些代码。

在这里浏览源代码。

OR

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

更多信息

其他回答

编辑:从iOS 3.2开始,这个功能是内置的。如果您需要支持3.2版本,您仍然可以使用这个解决方案。

我创建了一个扩展UILabel并处理加载.ttf文件的简单模块。我在Apache许可下发布了它,并把它放在github这里。

重要的文件是FontLabel.h和FontLabel.m。

它使用了Genericrich回答中的一些代码。

在这里浏览源代码。

OR

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

更多信息

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等…

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

在iOS 4中有一种使用自定义字体的简单方法。

将您的字体文件(例如,chalkdust .ttf)添加到XCode项目的资源文件夹中。 开放的信息。plist并添加一个名为UIAppFonts的新键。这个键的类型应该是array。 将您的自定义字体名称添加到该数组,包括扩展名(chalkdust .ttf)。 现在你可以在你的应用程序中使用[UIFont fontWithName:@"Chalkduster" size:16]。

不幸的是,IB不允许使用自定义字体初始化标签。看这个问题来解决这个问题。我最喜欢的解决方案是使用自定义UILabel子类:

@implementation CustomFontLabel

- (id)initWithCoder:(NSCoder *)decoder
{
    if (self = [super initWithCoder: decoder])
    {
        [self setFont: [UIFont fontWithName: @"Chalkduster" size: self.font.pointSize]];
    }
    return self;
}

@end

首先将.odt格式的字体添加到资源中,在本例中我们将使用DINEngschriftStd。Otf,然后使用这段代码将字体分配给标签

[theUILabel setFont:[UIFont fontWithName:@"DINEngschriftStd" size:21]];

要确保你的字体被加载到项目中,只需调用

NSLog(@"Available Font Families: %@", [UIFont familyNames]);

在.plist中,必须声明字体。只需添加一个'由应用程序提供的字体'记录,并添加一个带有字体名称的item 0字符串(DINEngschriftStd.otf)

我在iOS 3.1.2上尝试了这个页面上的各种建议,以下是我的结论:

简单地使用[UIFont fontWithName:size:]与资源目录中的字体将不起作用,即使使用FontForge设置了FOND名称。

[UIFont fontWithName:size:]将工作,如果字体首先使用GSFontAddFromFile加载。但是GSFontAddFromFile不是iOS 3.1.2的一部分,所以它必须像@rpetrich所描述的那样动态加载。