The system font on the iPhone is a good choice for many purposes. You can easily select it in a regular, bold or italic style using built-in font class methods. For example
UIFont *mainTitleFont = [UIFont boldSystemFontOfSize:14.0];
UIFont *subTitleFont = [UIFont SystemFontOfSize:14.0];
UIFont *textFont = [UIFont italicSystemFontOfSize:12.0];
But what if you want a font using both bold and italic at the same time, or a different typeface altogether? In that case, you can use the “fontWithName” method as follows.
UIFont *altFont = [UIFont fontWithName:@"Courier-Bold" size:14.0];
This is all well and good, but how did you know what font names and variants are available? If you just guess and get the name wrong, your code will throw an exception – there is no graceful mapping to nearest available font here!
I couldn’t find the list of available font names anywhere in the iPhone documentation, or for that matter even with a web search (at least within the first few pages of returned results). So instead I wrote a small snippet of code to list them for me.
// List all fonts on iPhone
NSArray *familyNames = [[NSArray alloc] initWithArray:[UIFont familyNames]];
NSArray *fontNames;
NSInteger indFamily, indFont;
for (indFamily=0; indFamily<[familyNames count]; ++indFamily)
{
NSLog(@"Family name: %@", [familyNames objectAtIndex:indFamily]);
fontNames = [[NSArray alloc] initWithArray:
[UIFont fontNamesForFamilyName:
[familyNames objectAtIndex:indFamily]]];
for (indFont=0; indFont<[fontNames count]; ++indFont)
{
NSLog(@" Font name: %@", [fontNames objectAtIndex:indFont]);
}
[fontNames release];
}
[familyNames release];
Using the iPhone SDK v2.1, the resulting output was as follows.
Family name: Hiragino Kaku Gothic ProN W3 Font name: HiraKakuProN-W3 Family name: Courier Font name: Courier Font name: Courier-BoldOblique Font name: Courier-Oblique Font name: Courier-Bold Family name: Arial Font name: ArialMT Font name: Arial-BoldMT Font name: Arial-BoldItalicMT Font name: Arial-ItalicMT Family name: STHeiti TC Font name: STHeitiTC-Light Font name: STHeitiTC-Medium Family name: AppleGothic Font name: AppleGothic Family name: Courier New Font name: CourierNewPS-BoldMT Font name: CourierNewPS-ItalicMT Font name: CourierNewPS-BoldItalicMT Font name: CourierNewPSMT Family name: Zapfino Font name: Zapfino Family name: Hiragino Kaku Gothic ProN W6 Font name: HiraKakuProN-W6 Family name: Arial Unicode MS Font name: ArialUnicodeMS Family name: STHeiti SC Font name: STHeitiSC-Medium Font name: STHeitiSC-Light Family name: American Typewriter Font name: AmericanTypewriter Font name: AmericanTypewriter-Bold Family name: Helvetica Font name: Helvetica-Oblique Font name: Helvetica-BoldOblique Font name: Helvetica Font name: Helvetica-Bold Family name: Marker Felt Font name: MarkerFelt-Thin Family name: Helvetica Neue Font name: HelveticaNeue Font name: HelveticaNeue-Bold Family name: DB LCD Temp Font name: DBLCDTempBlack Family name: Verdana Font name: Verdana-Bold Font name: Verdana-BoldItalic Font name: Verdana Font name: Verdana-Italic Family name: Times New Roman Font name: TimesNewRomanPSMT Font name: TimesNewRomanPS-BoldMT Font name: TimesNewRomanPS-BoldItalicMT Font name: TimesNewRomanPS-ItalicMT Family name: Georgia Font name: Georgia-Bold Font name: Georgia Font name: Georgia-BoldItalic Font name: Georgia-Italic Family name: STHeiti J Font name: STHeitiJ-Medium Font name: STHeitiJ-Light Family name: Arial Rounded MT Bold Font name: ArialRoundedMTBold Family name: Trebuchet MS Font name: TrebuchetMS-Italic Font name: TrebuchetMS Font name: Trebuchet-BoldItalic Font name: TrebuchetMS-Bold Family name: STHeiti K Font name: STHeitiK-Medium Font name: STHeitiK-Light
So when choosing a non-system font, you just have to make sure that you choose a font name from this list. Whether or not the list of font will change in future iPhone OS updates remains to be seen. It may be worth re-running this code snippet to see.
Late Addition: For samples of each font’s appearance, see my more recent post.
Awesome work Graham!
Bonus points for rendering each font in its own font 🙂
Thanks Keith. Yep! I’ll do it as soon as I find time to create a view to display them. Hmmm… I think it was meant to be about 5 days per view wasn’t it? Maybe I’d better sell it in the app store once its done!
interesting article thanks for the read!
Looks like Apple removed the font “Hiragino Kaku Gothic ProN W6” in the 2.2 software update.
Hi Andrew – thanks for the heads up so soon after the v2.2 release.
Great info! We will do a video tutorial and add it to our site on selecting fonts and showing how the fonts look on the iPhone.
Thank you.
iPhoneToot.com
Thanks a lot.
You post exactly what I was looking for. I do all my string renderings with quartz and have found no other way to select a font than from its name.
Excellent work. Notice that ten of the fonts seem to have missing characters where the Roman alphabet glyphs are. But the rest display fine.
To create an array of font names for experimentation within code, I’ve modified your code a bit to read:
Nice work!
-yuzatom
Same code using OS 3.0.1:
Family name: AppleGothic
Font name: AppleGothic
Family name: Hiragino Kaku Gothic ProN
Font name: HiraKakuProN-W6
Font name: HiraKakuProN-W3
Family name: Arial Unicode MS
Font name: ArialUnicodeMS
Family name: Heiti K
Font name: STHeitiK-Medium
Font name: STHeitiK-Light
Family name: DB LCD Temp
Font name: DBLCDTempBlack
Family name: Helvetica
Font name: Helvetica-Oblique
Font name: Helvetica-BoldOblique
Font name: Helvetica
Font name: Helvetica-Bold
Family name: Marker Felt
Font name: MarkerFelt-Thin
Family name: Times New Roman
Font name: TimesNewRomanPSMT
Font name: TimesNewRomanPS-BoldMT
Font name: TimesNewRomanPS-BoldItalicMT
Font name: TimesNewRomanPS-ItalicMT
Family name: Verdana
Font name: Verdana-Bold
Font name: Verdana-BoldItalic
Font name: Verdana
Font name: Verdana-Italic
Family name: Georgia
Font name: Georgia-Bold
Font name: Georgia
Font name: Georgia-BoldItalic
Font name: Georgia-Italic
Family name: Arial Rounded MT Bold
Font name: ArialRoundedMTBold
Family name: Trebuchet MS
Font name: TrebuchetMS-Italic
Font name: TrebuchetMS
Font name: Trebuchet-BoldItalic
Font name: TrebuchetMS-Bold
Family name: Heiti TC
Font name: STHeitiTC-Light
Font name: STHeitiTC-Medium
Family name: Geeza Pro
Font name: GeezaPro-Bold
Font name: GeezaPro
Family name: Courier
Font name: Courier
Font name: Courier-BoldOblique
Font name: Courier-Oblique
Font name: Courier-Bold
Family name: Arial
Font name: ArialMT
Font name: Arial-BoldMT
Font name: Arial-BoldItalicMT
Font name: Arial-ItalicMT
Family name: Heiti J
Font name: STHeitiJ-Medium
Font name: STHeitiJ-Light
Family name: Arial Hebrew
Font name: ArialHebrew
Font name: ArialHebrew-Bold
Family name: Courier New
Font name: CourierNewPS-BoldMT
Font name: CourierNewPS-ItalicMT
Font name: CourierNewPS-BoldItalicMT
Font name: CourierNewPSMT
Family name: Zapfino
Font name: Zapfino
Family name: American Typewriter
Font name: AmericanTypewriter
Font name: AmericanTypewriter-Bold
Family name: Heiti SC
Font name: STHeitiSC-Medium
Font name: STHeitiSC-Light
Family name: Helvetica Neue
Font name: HelveticaNeue
Font name: HelveticaNeue-Bold
Family name: Thonburi
Font name: Thonburi-Bold
Font name: Thonburi
Hello !
I’ve made a quick little app to test the rendering of a text in all the fonts available on the iPhone.
You can find it at http://www.fontpickerapp.com
Cheers !
Awesome work Etienne, thanks for this FREE app, really appreciated and helped me to pick a nice font for my game.
Cheers,
Guido
I’m happy to help 🙂
Hi,
First of all, thanks for the sample.
But I simplify a little bit the code
//List all fonts on iPhone
for (NSString* famName in [UIFont familyNames]) {
NSLog(@”Family name: %@”,famName);
for (NSString* fontName in [UIFont fontNamesForFamilyName:famName]) {
NSLog(@” Font name: %@\n”, fontName);
}
}
To simplify it even further:
NSLog(@”%@”, [UIFont familyNames]);
It automatically enumerates the returned NSArray object when put into the string.
%@ means any NSObject.
WONDERFUL guys..
its so awesome..
very very useful..!!!
thank you very much for you creativity.. 🙂
Here is a list of all fonts available on iOS4
http://bees4honey.com/blog/tutorial/ios-fonts-iphone-4-and-ipad-fonts-list/
Love love love love this post!
Holy cow, I’ve been looking all over for this.
Boggles my mind that the Apple docs don’t have simple reference lists like this. Things like date formatting, number formatting, fonts, etc. seem to be assumed. Thanks very much.
Just added “AmericanTypewriter-Bold” into my app tonight. Thanks!
Scott
@heyscottyman
Check out my iOS learnings and doings at http://www.myappventure.com
Hi. Nice info, I found it very useful.
Just a little thing, you have:
UIFont *subTitleFont = [UIFont SystemFontOfSize:14.0];
at the top of the page, with the single line examples. But the SystemFontOfSize method should be systemFontOfSize (no capital s). I’m not sure if it works properly or not with the capital letter, but I didn’t catch that and my compiler gave me a warning. I never actual ran that iteration of the program to where it would have actually tried calling SystemFontOfSize.
Anyway, thanks again, cheers.
http://iosfonts.com/
Come on guys, you could have at least sorted your font names for better readability. 🙂
Thank you very much for the code. It helped me get the actual name of the font to use.
In Swift can be translated like this:
var familyNames = [String](UIFont .familyNames())
for (var i = 0 ; i < familyNames.count; i++){
print("Font Family: \(familyNames[i])")
let fontNames = UIFont .fontNamesForFamilyName(familyNames[i])
for( var j = 0 ; j < fontNames.count ; j++)
{
print("Font Name: \(fontNames[j])")
}
}