Custom Fonts Bug

五迷三道 提交于 2019-11-28 09:29:51

问题


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.

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

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

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

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


回答1:


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

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

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:

For your reference i am adding the complete project here:




回答2:


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.



来源:https://stackoverflow.com/questions/46604829/custom-fonts-bug

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!