46

I've followed the step to to add custom fonts in xcode at swift day-by-day and custom fonts but I'm not able to set that font in app label programmatically.

var labeladd = UILabel(frame: CGRectMake(40, 50, 70, 22))
    //  label.center = CGPointMake(160, 284)
 ///  labeladd.font=UIFont.boldSystemFontOfSize(15)
   labeladd.font = UIFont(name:"Source Sans Pro",size:15)
    labeladd.textColor=UIColor.blackColor()
    labeladd.textAlignment = NSTextAlignment.Center
    labeladd.text = "this is custom fonts"
    myview.addSubview(labeladd)
3
  • please help me i cant find where i am wrong or mistaking Commented Nov 19, 2014 at 0:29
  • Did you add your Custom font into info.plist file? Commented Nov 19, 2014 at 6:01
  • Off topic: how did you add color to your sample code? Commented Mar 27, 2015 at 16:11

8 Answers 8

179

Let's say you want to add this font: SourceSansPro-Regular.otf

Four steps:

  1. Add the font file SourceSansPro-Regular.otf to your project, make sure you select your target in the "Add to targets".

enter image description here

Go to the target's Build Phases and make sure it is under Copy Bundle Resources. If not, add it.

enter image description here



2. Go to the target's Info. Add a new entry Font provided by application then add a new item with this value SourceSansPro-Regular.otf.

enter image description here



  1. From your finder, double click on the file SourceSansPro-Regular.otf, it might ask you to install the font to your Font Book.



  1. Open the OS X Font Book application, navigate to your font then press Command+i. Note the PostScript name and use that name in your Swift code. In this case, it's SourceSansPro-Regular. enter image description here



So in your code:

labeladd.font = UIFont(name:"SourceSansPro-Regular", size:15)

Sign up to request clarification or add additional context in comments.

3 Comments

I can't find the font in my font book application :( I am trying to add Philosopher-Regular.ttf
From your finder, double click on Philosopher-Regular.ttf, it might ask you to install the font to your Font Book.
I was not adding .ttf into info.plist. very minor mistake.
23

I've found (XCode 12) that unless your font happens to be already used in your Main.storyboard, that even if you have done all the correct steps of registering the font file in your app, copied to your bundle resources, used the PostScript name, yadda, yadda, that it still didnt show up and trying to use it in UIFont(name: size:) would still return nil. :-(

I worked around this current bug (?) by manually registering all my custom fonts at startup in AppDelegate application(_ application: didFinishLaunchingWithOptions:)

let fonts = Bundle.main.urls(forResourcesWithExtension: "ttf", subdirectory: nil)
fonts?.forEach({ url in
    CTFontManagerRegisterFontsForURL(url as CFURL, .process, nil)
})

(adapted from Xcode: Using custom fonts inside Dynamic framework)

2 Comments

Wow, what a weird bug
Weird bug. Thanks for the fix. Btw this works for .otf fonts too if you change the extension appropriately.
18

Sometimes the name of the font is not the name of your file. I was trying to use the NexaBook.otf font with the name "NexaBook" and at the end the problem was that the right name of the font is "Nexa-Book". To check you are using the right name write this code in the viewDidLoad and check the name of the font:

for family: String in UIFont.familyNames
    {
        print(family)
        for names: String in UIFont.fontNames(forFamilyName: family)
        {
            print("== \(names)")
        }
    }

In my case I got:

...
Nexa
== Nexa-Book
Avenir Next
== AvenirNext-Medium
== AvenirNext-DemiBoldItalic
== AvenirNext-DemiBold
...

I get this idea from Common Mistakes With Adding Custom Fonts to Your iOS App where you can find a great description of the problems working with custom fonts.

2 Comments

Good way for debuging font names, I was missing "W03" in CirceRoundedW03-Regular.
Every steps are right , but I can't find the font family in the Logged list. not found in storyboard, can't set programatically
8

enter image description here (1)First select the "Font" folder then make sure it's selected.

1 Comment

Yes., adding the target to the font is fixed my issue.
6

If you are getting the font in storyboard but not in font family and are not able to set it progammatically, then the reason is that the Xcode might not have compiled the font. To solve it:

  1. Set the required font(say: Roboto Bold) as the font of any UI element on storyboard E.g UILabel.
  2. Run the project
  3. Now check the font family names. The required font(say: Roboto Bold) name would have appeared in it.
  4. Now you can set the required font(say: Roboto Bold) progammatically :)

4 Comments

Step 1 solved my Problem. I tried everything else. Do you know why?
Still not clear why this is needed in 2020, but it does work in loading the fonts correctly.
copied to bundle->checked the target->checked info.plist->checked copy bundle resources-> still the Font family is not able find in the Log. Nobody Is commenting on what if did not find the Font in Logged list.
@Anees were you not able to get the font in font family, as per the given steps as well?
3

I was struggling with the issue quite a long time. It turned out that I forgot to add a .ttf / .otf extension to the font name in Info.plist.

1 Comment

.otf and .ttc was my case and it helped.
2

Follow Apple Guide to:

Adding a Custom Font to Your App

Beyond this, I've found that if your font is not already present in a Storyboard item, UIFont.familyNames.sorted() won't list it.

The workaround is to make a storyboard, you can leave unused, and add there a UILabel for each custom font you want to be available programmatically, and then set your font as custom font from properties panel.

This is not clean solution, but I didn't find any other solution.

Best regards.

/GM

Comments

0

If you are adding a custom font within a framework, you need to manually load the font in app delegate before using it.

Xcode: Using custom fonts inside Dynamic framework

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.