Can I embed a custom font in an iPhone application?
iOS 3.2 and later support this. Straight from the What's New in iPhone OS 3.2 doc:
Custom Font Support
Applications that want to use custom fonts can now include those fonts in their application bundle and register those fonts with the system by including the UIAppFonts key in their Info.plist file. The value of this key is an array of strings identifying the font files in the application’s bundle. When the system sees the key, it loads the specified fonts and makes them available to the application.
Once the fonts have been set in the Info.plist
, you can use your custom fonts as any other font in IB or programatically.
There is an ongoing thread on Apple Developer Forums:
https://devforums.apple.com/thread/37824 (login required)
And here's an excellent and simple 3 steps tutorial on how to achieve this (broken link removed)
- Add your custom font files into your project using Xcode as a resource
- Add a key to your
Info.plist
file calledUIAppFonts
. - Make this key an array
- For each font you have, enter the full name of your font file (including the extension) as items to the
UIAppFonts
array - Save
Info.plist
- Now in your application you can simply call
[UIFont fontWithName:@"CustomFontName" size:12]
to get the custom font to use with your UILabels and UITextViews, etc…
Also: Make sure the fonts are in your Copy Bundle Resources.
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.
I created a simple module that extends UILabel
and handles loading .ttf files. I released it opensource under the Apache license and put it on github Here.
The important files are FontLabel.h
and FontLabel.m
.
It uses some of the code from Genericrich's answer.
Browse the source Here.
OR
Copy your font file into resources
Add a key to your
Info.plist
file called UIAppFonts. ("Fonts provided by application)Make this key an array
For each font you have, enter the full name of your font file (including the extension) as items to the UIAppFonts array
Save
Info.plist
Now in your application you can simply call
[UIFont fontWithName:@"CustomFontName" size:15]
to get the custom font to use with yourUILabels
andUITextViews
, etc…
For More Information
There is a simple way to use custom fonts in iOS 4.
- Add your font file (for example,
Chalkduster.ttf
) to Resources folder of the project in XCode. - Open
info.plist
and add a new key calledUIAppFonts
. The type of this key should be array. - Add your custom font name to this array including extension (
Chalkduster.ttf
). - Now you can use
[UIFont fontWithName:@"Chalkduster" size:16]
in your application.
Unfortunately, IB doesn't allow to initialize labels with custom fonts. See this question to solve this problem. My favorite solution is to use custom UILabel
subclass:
@implementation CustomFontLabel
- (id)initWithCoder:(NSCoder *)decoder
{
if (self = [super initWithCoder: decoder])
{
[self setFont: [UIFont fontWithName: @"Chalkduster" size: self.font.pointSize]];
}
return self;
}
@end