Xcode 8 custom font doesn't show up in interface builder

Try Below Steps: Code tested in Swift 3.

Step 1: Add Your custom font into your project( Make sure Add to Target ticked).I am using "PermanentMarker.ttf","Pecita.otf" and "AROLY.ttf" font as a test font.

Note: Supporting font Type ttf and otf (Both font types should work)

Step 2: Modify the application-info.plist file. Add the key "Fonts provided by application" in a new row and add "PermanentMarker.ttf" as new item in the Array "Fonts provided by application".

Your plist should looks like this

enter image description here

Now the font will be available in Interface Builder. To use the custom font in code we need to refer to it by name, but the name often isn’t the same as the font’s filename

Now, You can access the Custom Font from your viewController. I am testing the font by placing a UIlabel to the Storyboard like below.

Update 2: Working Solution

After, imported your custom font and updated your plist.selectlabel from your storyBoard,goto Attributes Inspectorunder Label>Text type> select to Attributed and choose your custom font from the list.

enter image description here

enter image description here

enter image description here

Output:

enter image description here

Update 1

If your custom font still not listed in Xcode font list.check the related link to your issue

  • http://codewithchris.com/common-mistakes-with-adding-custom-fonts-to-your-ios-app/

  • custom font not displaying on some simulator

Note: Still,You can assign BebasNeue or custom font programatically to your label or button etc. even its not showing in your interface Builder.If you having trouble setting font to your object programatically.try below method.

Assign font to UILabel:

    label?.font = UIFont(name: "BebasNeue", size: 35) // Set to any size

Assign font to UIButton:

    button.titleLabel?.font = UIFont(name: "BebasNeue", size: 35)

Assign font to UITextField:

    textField.font = UIFont(name: "BebasNeue", size: 25) 

Assign font to UINavigationBar:

    navigationController?.navigationBar.titleTextAttributes = [NSFontAttributeName: UIFont(name: "BebasNeue", size: 25)!, NSForegroundColorAttributeName: UIColor.red]

Assign font to UIToolBar:

    UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: UIFont(name: "BebasNeue", size: 25.0)!], for: UIControlState.normal)

Output:

enter image description here


Its Easy and simple now- Tested in Xcode 10 and swift 5

Steps to add font to your Xcode

Select your UILabel, UITextField or whatever then under fonts section and follow

Step 1

Select settings menu from left corner of font selection screen. And choose font manager option.

enter image description here

Step 2

Click on the add button as marked below.

enter image description here

Step 3

Select the folder that contains your font. It will be loaded into XCode fonts list.

Steps to add fonts to your project

Don't forget to add description to your plist with the key Fonts provided by application and put font files inside copy bundle resources under project target settings.

Yes! thats it.. njoy..


When using the same font (Bebas Neue), I experience the exact same problem: the font does not show up in the font list for Plain controls.

It does for Attributed controls, as described in Update 2 in Joes post, but then you're actually changing the attributedText instead of the regular text, which may lead to unwanted behavior. For example, you'll have to fiddle with NSMutableAttributedString to change the text or text color at runtime.

I did some investigation on this issue. I used FontLab Studio to modify the font and do some tests. I used Bebas Neue version 1.400 (dated September 15, 2014) from dafont.com.

  • Maybe the font file was somehow corrupted. Re-saved as .otf and .ttf: Didn't work.
  • Maybe the meta data of the font were corrupted. Copied all the glyphs to a new font and named that Bebas Neue: Didn't work.
  • I renamed the font from Bebas Neue to BN: It works! But why?
  • Maybe you can't use "Neue" in a font name (since Helvetica Neue was the iOS system font up to iOS 8). Renamed the font to Test Neue: Still works.
  • Maybe you can't use "Bebas" in a font name then? Renamed the font to Bebas: Still works.
  • What... Just to be sure, I changed the font name back to Bebas Neue: Doesn't work again.
  • I also tried BebasNeue: Also didn't work.
  • Then I changed the name to Bebas Neue Whatever: It works.

    Bebas Neue Whatever

I really do not understand why this is happening. Doesn't Apple or Xcode want you to use "Bebas Neue" or "BebasNeue" in the Interface Builder? I had the normal Bebas Neue installed. Maybe the reference got corrupted? I really can't tell. Maybe someone on a clean system can try if Bebas Neue works in their Xcode.

Anyway, I achieved my goal: being able to use Bebas Neue (I named the final version "Bebas Neue MyAppName") for Plain styled labels and buttons, so I can design my app as-is and don't have to fiddle around with attributed strings.