This question relates to iOS pre-3.2. As of 3.2, this functionality is easily achievable using samvermette's answer below, and I have changed the Accepted Answer (from command to samvermette) to reflect this. I can't give credit to both answers (besides upvotes) but they are both good.
我想有一个应用程序包括一个自定义字体用于渲染文本,加载它,然后使用它与标准 UIKit
元素,如 UILabel
. 这可能吗?
我在下面找到了链接:
但是这些要求我自己渲染每个字形,这有点太辛苦了,特别是对于多行文本 .
我也发现帖子直截了当地说这是不可能的,但没有理由,所以我正在寻找一个明确的答案 .
EDIT - 失败 -[UIFont fontWithName:size:]
实验
我下载了Harrowprint.tff(从here下载)并将其添加到我的Resources目录和项目中 . 然后我尝试了这段代码:
UIFont* font = [UIFont fontWithName:@"Harrowprint" size:20];
导致异常被抛出 . 查看Finder中的TTF文件,确认字体名称为Harrowprint .
EDIT - 到目前为止已经有很多回复告诉我阅读关于X或Y的文档 . 我已经对所有这些进行了广泛的实验并且无处可去 . 在一个案例中,X结果仅与OS X相关,而不是在iPhone上 . 因此,我正在为这个问题设置一个赏金,我将奖励给第一个提供答案的人(仅使用文档化的API),他们会回答足够的信息以使其在设备上运行 . 在模拟器上工作也是一个奖励 .
EDIT - 看来赏金自动奖励得票数最多的答案 . 有趣 . 实际上没有人提供解决问题的答案 - 涉及编码你自己的 UILabel
子类的解决方案不支持自动换行,这对我来说是一个必不可少的功能 - 尽管我想我可以扩展它来做到这一点 .
30 回答
在Info.plist中添加条目“由应用程序提供的字体”并将字体名称包括为字符串:
然后通过运行检查以确保包含您的字体:
请注意,您的ttf文件名可能与设置标签字体时使用的名称不同(可以使用上面的代码获取“fontWithName”参数):
虽然上面的一些答案是正确的,但我已经为仍然遇到字体问题的人写了详细的视觉教程 .
上面的解决方案告诉您将字体添加到plist并使用
是正确的 . 请现在使用任何其他hackish方式 . 如果您仍然遇到查找字体名称并添加它们的问题,这里是教程 -
Using custom fonts in ios application
iOS 3.2及更高版本支持此功能 . 直接来自iPhone OS 3.2 doc中的新功能:
在
Info.plist
中设置字体后,您可以将自定义字体用作IB中的任何其他字体或以编程方式使用 .Apple Developer论坛上有一个持续的主题:
https://devforums.apple.com/thread/37824(需要登录)
这里有一个非常简单的3步教程,介绍如何实现这一目标(删除断开的链接)
使用Xcode作为资源将自定义字体文件添加到项目中
在
Info.plist
文件中添加一个名为UIAppFonts
的密钥 .将此键设为数组
对于您拥有的每种字体,请输入字体文件的全名(包括扩展名)作为
UIAppFonts
数组的项目保存
Info.plist
现在在您的应用程序中,您只需调用
[UIFont fontWithName:@"CustomFontName" size:12]
即可获得与 UILabels 和 UITextViews 等一起使用的自定义字体...另外:确保字体在Copy Bundle Resources中 .
您可以在资源文件夹中添加所需的"FONT"文件 . 然后转到Project
Info.plist
文件并使用KEY "Fonts provided by the application"和值作为"FONT NAME" .然后你可以调用方法
[UIFont fontwithName:@"FONT NAME" size:12];
首先将.odt格式的字体添加到资源中,在这种情况下我们将使用DINEngschriftStd.otf,然后使用此代码将字体分配给标签
要确保在项目中加载字体,只需调用即可
在.plist上,您必须声明字体 . 只需添加“应用程序提供的字体”记录,并添加一个带有字体名称的项目0字符串(DINEngschriftStd.otf)
我做了一切可能但新的字体没有出现所以我找到了解决方案:
当您拖动fot文件(otf或ttf)时,请忘记选中“添加到目标”下的复选框 .
完成后,您的字体将出现,一切都会正常工作 .
在finder和"Get Info"中找到TTF . 它在"Full name:" Headers 下给了我一个名字,然后我用
fontWithName
(我只是复制并粘贴了确切的名称,在这种情况下,不需要'.ttf'扩展名) .一个重要的通知:您应该使用与字体关联的“PostScript名称”,而不是其全名或姓氏 . 此名称通常可以与字体的常规名称不同 .
它尚未推出,但下一版本的cocos2d(2d游戏框架)将支持可变长度位图字体作为字符映射 .
http://code.google.com/p/cocos2d-iphone/issues/detail?id=317
该作者没有这个版本的固定发布日期,但我确实看到一个帖子表明它将在下个月或两个月 .
这是一步一步说明如何做到这一点 . 无需额外的库或任何特殊编码 .
http://shang-liang.com/blog/custom-fonts-in-ios4/
大多数情况下问题是字体而不是方法 . 最好的方法是使用肯定会起作用的字体,如verdana或geogia . 然后更改为预期的字体 . 如果它不起作用,可能是字体名称不正确,或者字体不是格式良好的字体 .
对于iOS 3.2及更高版本:使用上面几个提供的方法,它们是:
将您的字体文件(例如, Chalkduster.ttf )添加到XCode中项目的Resources文件夹中 .
打开info.plist并添加一个名为UIAppFonts的新密钥 . 此键的类型应为数组 .
将自定义字体名称添加到此数组,包括扩展名(“ Chalkduster.ttf ”) .
在您的应用程序中使用
[UIFont fontWithName:@"Real Font Name" size:16]
.BUT "Real Font Name"并不总是您在Fontbook中看到的那个 . 最好的方法是询问您的设备它看到的字体以及确切的名称 .
我使用的uifont-name-grabber发布于:uifont-name-grabber
只需将您想要的字体放入xcode项目,将文件名添加到其plist,然后在您正在构建的设备上运行它,它将使用
UIFont fontWithName:
期望的名称通过电子邮件向您发送完整的字体列表 .我这样做了:
加载字体:
现在,在
drawRect:
中,执行以下操作:基本上你必须在文本中做一些暴力循环并用魔法数字来寻找你的偏移量(在这里,请看我使用29),但是它有效 .
此外,您必须确保该字体是合法嵌入的 . 大多数都不是,并且有律师专门研究这类事情,所以要警告 .
Edit: As of iOS 3.2, this functionality is built in. If you need to support pre-3.2, you can still use this solution.
我创建了一个扩展
UILabel
并处理加载.ttf文件的简单模块 . 我在Apache许可下发布了opensource并把它放在github上Here.重要文件是
FontLabel.h
和FontLabel.m
.它使用了Genericrich's answer中的一些代码 .
浏览源Here.
要么
将您的字体文件复制到资源中
为名为UIAppFonts的
Info.plist
文件添加密钥 . (“申请提供的字体)将此键设为数组
对于您拥有的每种字体,请输入字体文件的全名(包括扩展名)作为UIAppFonts数组的项目
保存
Info.plist
现在在您的应用程序中,您只需调用
[UIFont fontWithName:@"CustomFontName" size:15]
即可获得与UILabels
和UITextViews
等一起使用的自定义字体...For More Information
在现有iOS应用程序上添加新字体非常容易 .
你只需要添加字体,例如font.ttf进入资源文件夹 .
打开您的应用程序
info.plist
. 将新行添加为"Fonts provided by application",并将字体名称键入为font.ttf .设置字体时请执行
setFont:"corresponding Font Name"
您可以通过
NSArray *check = [UIFont familyNames];
检查是否添加了字体 .它返回应用程序支持的所有字体 .
Swift,代码方式:(也适用于swift 2.0)
将所需的字体添加到项目中(就像添加图像一样,只需拖动到Xcode),确保它们针对您的项目
添加此方法并加载自定义字体(推荐在
appDelegate didFinishLaunchingWithOptions
中)使用示例:
使用字体:
按照这一步
1)在项目中复制字体
2)在源代码模式下打开
.plist
文件...(注意 - 不要打开info.plist
)3)在此之前 - 右键单击您的字体并在fontforge或类似的编辑器中打开它,并在系统中
install
它应该是install
4)输入此
5)在
class .m
中键入此代码这里lblPoints将会改变你的
UILabel
完成!如果您的字体仍无效,请先检查字体兼容性
是的,您可以包含自定义字体 . 请参阅有关UIFont的文档,特别是
fontWithName:size:
方法 .1)确保在资源文件夹中包含该字体 .
2)字体的“名称”不一定是文件名 .
3)确保您拥有使用该字体的合法权利 . 通过将其包含在您的应用中,您还可以分发它,并且您需要有权这样做 .
是的,您可以在应用程序中使用自定义字体
一步一步跟着那里:
在支持文件中将自定义字体文件添加到项目中
为名为UIAppFonts的
Info.plist
文件添加密钥 .将此键设为数组
对于您拥有的每种字体,请输入字体文件的全名(包括扩展名)作为UIAppFonts数组的项目
保存
Info.plist
现在在您的应用程序中,您只需调用[UIFont fontWithName:@"your Custom font Name" size:20]
即可获得与UILabels
一起使用的自定义字体如果你没有得到正确的字体应用此后,你双击自定义字体,并仔细看到顶部字体名称即将到来并复制此字体,粘贴,这里
[UIFont fontWithName:@" here past your Custom font Name" size:20]
我希望你会得到正确的答案edit: This answer is defunct as of iOS3.2; use UIAppFonts
我能够成功加载自定义
UIFont
的唯一方法是通过私有GraphicsServices框架 .以下将加载应用程序主包中的所有
.ttf
字体:加载字体后,可以像使用Apple提供的字体一样使用它们:
甚至可以在运行时加载GraphicsServices,以防API在将来消失:
也许作者忘了给字体Mac FOND name?
打开FontForge中的字体,然后转到元素>字体信息
有一个"Mac"选项,您可以在其中设置FOND名称 .
在文件>导出字体下,您可以创建新的ttf
您也可以尝试在导出对话框中输入“Apple”选项 .
DISCLAIMER :我不是iPhone开发者!
更好的解决方案是在
info.plist
文件中添加新属性“Fonts provided by application
” .然后,您可以使用自定义字体,如普通
UIFont
.查找
ATSApplicationFontsPath
一个简单的plist条目,允许您将字体文件包含在应用程序资源文件夹中,并且它们在您的应用程序中“正常工作” .
我建议按照我最喜欢的简短教程之一:http://codewithchris.com/common-mistakes-with-adding-custom-fonts-to-your-ios-app/从中获取此信息 .
Step 1 - Drag your .ttf or .otf from Finder into your Project
注意 - 确保单击主应用程序目标上的'Add to targets'框
如果您忘记单击将其添加到目标,然后单击项目层次结构中的字体文件,并在右侧面板上单击目标成员资格部分中的主应用程序目标
要确保您的字体是应用程序目标的一部分,请确保它们显示在Build Phases中的Copy Bundle Resources中
Step 2 - Add the font file names to your Plist
转到信息部分中的自定义iOS目标属性,并在该部分中的项目中添加一个名为
Fonts provided by application
的项目(您应该看到它在您键入时作为选项出现,并将其自身设置为数组 . 单击此项箭头打开数组项并输入您添加的.ttf或.otf文件的名称,让您的应用知道这些是您想要的字体文件注意 - 如果您的应用程序在此步骤之后立即崩溃,请检查您在此处添加的项目的拼写
Step 3 - Find out the names of your fonts so you can call them
通常,应用程序看到的字体名称与您认为基于该字体的文件名的字体名称不同,将其放在代码中并查看应用程序生成的日志,以查看代码中要调用的字体名称
迅速
目标C.
您的日志应如下所示:
Step 4 - Use your new custom font using the name from Step 3
迅速
目标C.
使用
iOS 8
和Xcode 6
,您可以轻松完成此操作 . 以下是步骤:1)将您的字体拖放到
Xcode
Supporting Files文件夹 . 不要忘记在 Add to targets 部分标记您的应用 . 从这一刻起,您可以在IB
中使用此字体,并从字体托盘中选择它 .2)要在您的设备中使用此字体,请打开
info.plist
并添加Fonts provided by application
键 . 它将包含Item 0键,您必须添加您的字体名称作为值 . 字体名称可能与您的字体文件名不同 . 但首先,尝试在大多数情况下添加您的文件名 .如果没有,this article总是帮助我 .
以下是本文代码的快速摘录,以帮助您找到您的字体名称 .
编辑
我想提一下,你需要将字体文件添加到 Target's Build Phases , Copy Bundle Resources . 没有它,您将无法在设备上看到您的字体 . 它可能导致意外行为 .
例如,当
UITextField
具有自定义字体时,我遇到bug
,但此字体不在 Copy Bundle Resources 中 . 当我使用textfield
进行viewcontroller
时,在调用viewDidLoad
函数之前会有大约4秒的延迟 . 解决字体问题消除了此延迟 . 所以,建议检查两次 . (rdar:// 20028250)顺便说一句,我当时没有't able to reproduce the bug, but I'确定问题与字体有关 .是的,您可以在应用程序中使用自定义字体
一步一步跟着那里:
在支持文件中将自定义字体文件添加到项目中
在Info.plist文件中添加一个名为UIAppFonts的密钥 .
将此键设为数组
对于您拥有的每种字体,请输入字体文件的全名(包括扩展名)作为UIAppFonts数组的项目
保存Info.plist现在在你的应用程序中你可以简单地调用[UIFont fontWithName:@“你的自定义字体名称”大小:20]来获取自己的UILabel使用的自定义字体,如果你没有得到正确的字体然后你双击关于自定义字体,并仔细查看顶部字体名称是来源并复制此字体,粘贴,这里[UIFont fontWithName:@“这里过去你的自定义字体名称”大小:20]
我希望你能得到正确答案
我结合了一些这个页面上的建议成为适用于iOS 5的东西 .
首先,您必须将自定义字体添加到项目中 . 然后,您需要遵循@iPhoneDev的建议并将字体添加到info.plist文件中 .
完成后,这有效:
但是,您需要知道字体的Postscript名称 . 只需按照@Daniel Wood的建议,在你使用FontBook的同时按下command-i .
然后,享受您的自定义字体 .
我一直在iOS 3.1.2上尝试这个页面上的各种建议,这些是我的结论:
即使使用FontForge设置FOND名称,只需将
[UIFont fontWithName:size:]
与Resources目录中的字体一起使用也行不通 .如果首先使用GSFontAddFromFile加载字体,
[UIFont fontWithName:size:]
将起作用 . 但GSFontAddFromFile
不是iOS 3.1.2的一部分,所以它必须按照@rpetrich的描述动态加载 .从iOS 4.1开始,有一种使用自定义字体的新方法 . 它允许您动态加载字体,无论是应用程序附带的文件,下载的数据,还是您拥有的内容 . 它还允许您根据需要加载字体,而旧方法在应用程序启动时加载它们,如果您有许多字体,这可能需要很长时间 .
新方法描述于ios-dynamic-font-loading
您使用
CTFontManagerRegisterGraphicsFont
函数,为其提供包含字体数据的缓冲区 . 它可用于UIFont
和Web视图,就像旧方法一样 . 以下是该链接的示例代码:如果您使用
xcode 4.3
,则必须根据线程中的https://stackoverflow.com/users/1292829/arne将font
添加到Copy Bundle Resources
下的Build Phase
,Custom Fonts Xcode 4.3 . 这对我有用,这里是我在我的应用程序中使用自定义字体的步骤:将字体添加到项目中 . 我将
OTF
(或TTF
)文件拖放到我创建的新组中,并接受xcode选择的copying the files over to the project folder
.创建
UIAppFonts
数组,并将字体列为数组中的项目 . 只是names
,而不是扩展名(例如“GothamBold
", "GothamBold-Italic
”) .单击屏幕左侧
Project Navigator
顶部的project name
方式 .单击xcode主区域中显示的
Build Phases
选项卡 .展开“
Copy Bundle Resources
”部分,然后单击"+"
添加字体 .从单击
"+"
时弹出的文件导航器中选择字体文件 .为您所拥有的每种字体执行此操作
add to the project
.有一种在 iOS 4 中使用自定义字体的简单方法 .
将您的字体文件(例如,
Chalkduster.ttf
)添加到XCode中项目的Resources文件夹中 .打开
info.plist
并添加一个名为UIAppFonts
的新密钥 . 此键的类型应为数组 .将自定义字体名称添加到此数组,包括扩展名(
Chalkduster.ttf
) .现在您可以在应用程序中使用
[UIFont fontWithName:@"Chalkduster" size:16]
.不幸的是,IB不允许使用自定义字体初始化标签 . 请参阅this question以解决此问题 . 我最喜欢的解决方案是使用自定义
UILabel
子类: