Can I embed a custom font in an iPhone application?
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.
I would like to have an app include a custom font for rendering text, load it, and then use it with standard UIKit
elements like UILabel
. Is this possible?
I found below links:
but these would require me to render each glyph myself, which is a bit too much like hard work, especially for multi-line text.
I've also found posts that say straight out that it's not possible, but without justification, so I'm looking for a definitive answer.
EDIT - failed -[UIFont fontWithName:size:]
experiment
I downloaded Harrowprint.tff (downloaded from here) and added it to my Resources directory and to the project. I then tried this code:
UIFont* font = [UIFont fontWithName:@"Harrowprint" size:20];
which resulted in an exception being thrown. Looking at the TTF file in Finder confirmed that the font name was Harrowprint.
EDIT - there have been a number of replies so far which tell me to read the documentation on X or Y. I've experimented extensively with all of these and got nowhere. In one case, X turned out to be relevant only on OS X, not on iPhone. Consequently, I am setting a bounty for this question, and I will award the bounty to the first person who provides an answer (using only documented APIs) who responds with sufficient information to get this working on the device. Working on the simulator too would be a bonus.
EDIT - It appears that the bounty auto-awards to the answer with the highest number of votes. Interesting. No one actually provided an answer that solved the question as asked - the solution that involves coding your own UILabel
subclass doesn't support word-wrap, which is an essential feature for me - though I guess I could extend it to do so.
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)
Info.plist
file called UIAppFonts
. UIAppFonts
array Info.plist
[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 your UILabels
and UITextViews
, etc…
For More Information
There is a simple way to use custom fonts in iOS 4 .
Chalkduster.ttf
) to Resources folder of the project in XCode. info.plist
and add a new key called UIAppFonts
. The type of this key should be array. Chalkduster.ttf
). [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
链接地址: http://www.djcxy.com/p/8234.html