我可以在iPhone应用程序中嵌入自定义字体吗?
这个问题涉及iOS 3.2之前的版本。 从3.2开始,使用samvermette的答案很容易实现此功能,并且我已将接受的答案(从命令改为samvermette)反映出来。 我不能赞扬这两个答案(除了upvotes),但他们都很好。
我希望有一个应用程序包含用于呈现文本的自定义字体,加载它,然后将其与标准UIKit
元素(如UILabel
。 这可能吗?
我发现下面的链接:
但是这些都需要我自己渲染每个字形,这有点像辛勤工作,特别是对于多行文本。
我还发现一些文章说明这是不可能的,但没有理由,所以我正在寻找一个明确的答案。
编辑 - 失败-[UIFont fontWithName:size:]
实验
我下载了Harrowprint.tff(从这里下载)并将其添加到我的资源目录和项目中。 然后我尝试了这段代码:
UIFont* font = [UIFont fontWithName:@"Harrowprint" size:20];
导致抛出异常。 查看Finder中的TTF文件,确认字体名称为Harrowprint。
编辑 - 到目前为止,已经有了很多回复,这些回复告诉我要阅读X或Y上的文档。我对这些内容进行了广泛的实验,并没有得到任何答案。 在一个案例中,X被证明仅适用于OS X,而不是iPhone。 因此,我为这个问题设置了奖励,并且我将奖励给第一个提供答案的人(仅使用记录的API),他们以足够的信息做出响应,以便在设备上正常工作。 在模拟器上工作也是一个好处。
编辑 - 看来,赏金自动奖励的答案与最高票数。 有趣。 没有人真正提供了解决问题的答案 - 问题涉及编码自己的UILabel
子类的解决方案不支持自动换行,这对我来说是一个基本功能 - 尽管我想我可以扩展它来这样做。
iOS 3.2和更高版本支持这一点。 直接从iPhone OS 3.2 doc的新功能:
自定义字体支持
想要使用自定义字体的应用程序现在可以在应用程序包中包含这些字体,并通过在Info.plist文件中包含UIAppFonts键将这些字体注册到系统中。 这个键的值是一串字符串,标识应用程序包中的字体文件。 系统看到密钥时,会加载指定的字体并使其可供应用程序使用。
一旦在Info.plist
设置了字体,您可以使用自定义字体作为IB中的任何其他字体或以编程方式使用。
Apple开发者论坛上有一个正在进行的讨论:
https://devforums.apple.com/thread/37824(需要登录)
这里有一个很好的简单的3步教程,介绍如何实现这一点(断开的链接删除)
Info.plist
文件中添加一个名为UIAppFonts
。 UIAppFonts
阵列的项目 Info.plist
[UIFont fontWithName:@"CustomFontName" size:12]
来获得与你的UILabels和UITextView等一起使用的自定义字体。 另外:确保字体在你的拷贝包资源中。
编辑:从iOS 3.2开始,这个功能是内置的。如果你需要支持3.2之前的版本,你仍然可以使用这个解决方案。
我创建了一个扩展UILabel
并处理加载.ttf文件的简单模块。 我在Apache许可证下发布了opensource,并将其放在github上。
重要的文件是FontLabel.h
和FontLabel.m
。
它使用Genericrich答案中的一些代码。
在这里浏览源代码。
要么
将您的字体文件复制到资源中
向您的Info.plist
文件中添加一个名为UIAppFonts的密钥。 (“应用程序提供的字体)
将此键设为数组
对于每种字体,请输入字体文件的全名(包括扩展名)作为UIAppFonts阵列的项目
保存Info.plist
现在在您的应用程序中,您可以简单地调用[UIFont fontWithName:@"CustomFontName" size:15]
以获得用于UILabels
和UITextViews
等的自定义字体。
了解更多信息
有一种简单的方法可以在iOS 4中使用自定义字体。
Chalkduster.ttf
)添加到XCode中项目的资源文件夹中。 info.plist
并添加一个名为UIAppFonts
的新密钥。 这个键的类型应该是数组。 Chalkduster.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
链接地址: http://www.djcxy.com/p/8233.html