Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.2k views
in Technique[技术] by (71.8m points)

ios - 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

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...