EDUsta
EDUsta

Reputation: 1933

Custom Fonts Bug

TL;DR: Custom fonts couldn't be used programmatically before using them in a Storyboard/xib.

Note: I've checked out this, tried the answers and they didn't work. I've also made sure that they're in target membership.

I've noticed a strange bug while changing segment control title a custom font:

segmentedControl.titleTextAttributes = NSDictionary(objects: [UIFont.init(name: "Comfortaa-Regular",
                                                                          size: UIFont.systemFontSize)!,
                                                              UIColor.white],
                                                    forKeys: [NSAttributedStringKey.font as NSCopying,
                                                              NSAttributedStringKey.foregroundColor as NSCopying]) as? [AnyHashable : Any]

It couldn't find the font, so unwrapping has failed. But the font could be seen in the Storyboard.

FontList

It's properly added to the project, here's the CopyBundle and InfoList:

CopyBundleResources

InfoPlist

So here's the catch; if I use it in the Storyboard, it is shown in the font families:

ComfortaaBold

But if not, it's not shown -here I've changed to light and bold has disappeared-, and cannot be used programmatically.

ComfortaaLight

I'm using Xcode Version 9.0 (9A235), and Swift 4. I've also checked OpenRadar and couldn't find a submission regarding this.

The mentioned font: Comfortaa

Upvotes: 3

Views: 1012

Answers (2)

Rocky
Rocky

Reputation: 3235

@EDUsta, I just tried with given font and its work ok, no issue in it, giving the step which i followed:

  1. Add the Comfortaa-Bold.ttf, Comfortaa-Light.ttf, Comfortaa-Regular.ttf Font files to project.

enter image description here

2.Add the entries of Fonts in info.plist file

enter image description here

Make sure the font added in project target.

After it, apply the fonts on UILabel and UISegmentedControl using Swift code given below:

   let fontFirst = UIFont(name: "Comfortaa-Bold", size: 16.0)!
    segmentFont.setTitleTextAttributes([NSAttributedStringKey.font : fontFirst, NSAttributedStringKey.foregroundColor : UIColor.red],
                                       for: .normal)

    labelBold.font = UIFont(name: "Comfortaa-Bold", size: 16.0)
    labelLight.font = UIFont(name: "Comfortaa-Light", size: 16.0)
    labelRegular.font = UIFont(name: "Comfortaa-Regular", size: 16.0)

its work perfectly, you can check in below screenshot image:

enter image description here

For your reference i am adding the complete project here:

Upvotes: 2

mkkrolik
mkkrolik

Reputation: 1259

I have the same problem. I can't add exactly the same font family (Comfortaa) programatically - everytime it crashes, but once I add label in launchscreen and set font to Comfotaa-Bold, font loaded from code works fine and doesn't crash. So my solution is to add 3 labels with fonts such as - Comfortaa Bold, Comfortaa Regular, Comfortaa Light in launchscreen and set "hidden" flag on true. This way I'm able to use all of them programatically.

Upvotes: 1

Related Questions