Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Custom Fonts Bug

Tags:

ios

swift

xcode9

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

like image 386
EDUsta Avatar asked Aug 14 '26 17:08

EDUsta


1 Answers

@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:

like image 184
Rocky Avatar answered Aug 17 '26 08:08

Rocky



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!