如何以正确的方式在整个IOS应用程序中使用自定义字体

佩德罗·安东尼奥

我对此主题进行了很多研究,但是,我还没有找到一种为整个IOS应用轻松设置自定义字体的方法我需要为一个非常大的应用程序更改整个字体,而我已经在Android中非常轻松地做到了。

解决方案的答案似乎对于目标C而言已过时,或者对于此任务而言过于复杂

到目前为止,我已经找到了3种主要方法:

  1. 传统方法:使用枚举或扩展。问题在于,如果该应用程序已经高级,那么将字体应用于每个单个视图确实很繁琐。
  2. 使用视图和.appearance()的扩展问题在于,它将字体设置为每个单个视图,并且您可能希望使用一个UILabel使用一种字体,使用另一个UILabel使用其他字体。
  3. 使用“ Hack”(似乎是一个很好的解决方案),问题在于它具有风险,而不是将来的证明,原因可能是苹果将来会在应用商店中拒绝此类应用。这种方法也更改了某些系统UI字体,因此它更像是hack,而不是本机解决方案。

我找到了这种解决方案,但是它们并不完全灵活。Android有一个很棒的方法只需在xml和tadaa中添加一个字体系列,系统会自动选择合适的字体),我相信IOS可能会这么做。

还有其他办法吗?否则,推荐的方法是什么

敏斯先生

基于此网站并进行一些调整

首先:您必须在项目中添加字体并将其添加到info.plist文件中:https : //codewithchris.com/common-mistakes-with-adding-custom-fonts-to-your-ios-app/

文件:UIFont.swift

import Foundation
import UIKit

struct AppFontName {
  static let regular = "Montserrat-Regular"
  static let bold = "Montserrat-Bold"
  static let lightAlt = "Montserrat-Light"
}
//customise font
extension UIFontDescriptor.AttributeName {
  static let nsctFontUIUsage = UIFontDescriptor.AttributeName(rawValue: "NSCTFontUIUsageAttribute")
}

extension UIFont {

  @objc class func mySystemFont(ofSize size: CGFloat) -> UIFont {
        return UIFont(name: AppFontName.regular, size: size)!
  }

  @objc class func myBoldSystemFont(ofSize size: CGFloat) -> UIFont {
        return UIFont(name: AppFontName.bold, size: size)!
  }

  @objc class func myItalicSystemFont(ofSize size: CGFloat) -> UIFont {
        return UIFont(name: AppFontName.lightAlt, size: size)!
  }

  @objc convenience init(myCoder aDecoder: NSCoder) {
    guard
        let fontDescriptor = aDecoder.decodeObject(forKey: "UIFontDescriptor") as? UIFontDescriptor,
        let fontAttribute = fontDescriptor.fontAttributes[.nsctFontUIUsage] as? String else {
        self.init(myCoder: aDecoder)
        return
    }
    var fontName = ""
    switch fontAttribute {
    case "CTFontRegularUsage":
        fontName = AppFontName.regular
    case "CTFontEmphasizedUsage", "CTFontBoldUsage":
        fontName = AppFontName.bold
    case "CTFontObliqueUsage":
        fontName = AppFontName.lightAlt
    default:
        fontName = AppFontName.regular
    }
    self.init(name: fontName, size: fontDescriptor.pointSize)!
  }

  class func overrideInitialize() {
    guard self == UIFont.self else { return }

    if let systemFontMethod = class_getClassMethod(self, #selector(systemFont(ofSize:))),
        let mySystemFontMethod = class_getClassMethod(self, #selector(mySystemFont(ofSize:))) {
        method_exchangeImplementations(systemFontMethod, mySystemFontMethod)
    }

    if let boldSystemFontMethod = class_getClassMethod(self, #selector(boldSystemFont(ofSize:))),
        let myBoldSystemFontMethod = class_getClassMethod(self, #selector(myBoldSystemFont(ofSize:))) {
        method_exchangeImplementations(boldSystemFontMethod, myBoldSystemFontMethod)
    }

    if let italicSystemFontMethod = class_getClassMethod(self, #selector(italicSystemFont(ofSize:))),
        let myItalicSystemFontMethod = class_getClassMethod(self, #selector(myItalicSystemFont(ofSize:))) {
        method_exchangeImplementations(italicSystemFontMethod, myItalicSystemFontMethod)
    }

    if let initCoderMethod = class_getInstanceMethod(self, #selector(UIFontDescriptor.init(coder:))), // Trick to get over the lack of UIFont.init(coder:))
        let myInitCoderMethod = class_getInstanceMethod(self, #selector(UIFont.init(myCoder:))) {
        method_exchangeImplementations(initCoderMethod, myInitCoderMethod)
    }
  }
}

AppDelegate.swift

override init() {
    super.init()
    UIFont.overrideInitialize()
}

用法:

label.font = UIFont.boldSystemFont(ofSize: 16)
label.fontUIFont.systemFont(ofSize: 12)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在整个应用程序中使用自定义工具栏

来自分类Dev

如何在整个应用程序中使用自定义工具栏

来自分类Dev

如何在Windows Universal应用程序中使用自定义字体?

来自分类Dev

如何在Mac应用程序中使用自定义字体?

来自分类Dev

如何在RShiny应用程序中使用自定义字体

来自分类Dev

如何在Windows Universal应用程序中使用自定义字体?

来自分类常见问题

如何在Android中为整个应用程序设置自定义字体?

来自分类Dev

如何在棒棒糖中为整个应用程序设置自定义字体

来自分类Dev

如何以编程方式更新应用程序配置文件中的自定义属性

来自分类Dev

如何以编程方式从自定义PHP应用程序创建WordPress帖子?

来自分类Dev

如何在iOS应用程序中将自定义字体系列设置为系统字体

来自分类Dev

如何在iOS中使用.ttc自定义字体

来自分类Dev

在角度应用程序中使用自定义Webpack

来自分类Dev

如何将应用程序字体更改为自定义字体

来自分类Dev

如何在Heroku / Perl Web应用程序中使用自定义模块?

来自分类Dev

如何在Xcode中以编程方式在iOS中使用自定义字体(例如:Helvetica CY.ttf)

来自分类Dev

是否可以在Xubuntu的“键盘”设置中使用单个自定义键盘快捷方式启动多个应用程序?

来自分类Dev

整个应用程序的自定义格式

来自分类Dev

整个应用程序的自定义格式

来自分类Dev

向laravel应用程序添加自定义字体

来自分类Dev

Android应用程序的自定义字体

来自分类Dev

如何将自定义Controltemplate设置为整个应用程序的默认值?

来自分类Dev

如何在我的应用程序中嵌入自定义字体

来自分类Dev

如何在Angular应用程序中导入PDFMake的自定义字体?

来自分类Dev

如何在Rails应用程序中用自定义图标替换字体真棒图标

来自分类Dev

如何为所有文本声明应用程序范围的自定义字体

来自分类Dev

使用的特定自定义字体在android应用程序中不起作用

来自分类Dev

在Android Studio中为科学计算器应用程序使用自定义字体

来自分类Dev

如何使用自定义应用程序替换Windows 10上的登录应用程序

Related 相关文章

  1. 1

    如何在整个应用程序中使用自定义工具栏

  2. 2

    如何在整个应用程序中使用自定义工具栏

  3. 3

    如何在Windows Universal应用程序中使用自定义字体?

  4. 4

    如何在Mac应用程序中使用自定义字体?

  5. 5

    如何在RShiny应用程序中使用自定义字体

  6. 6

    如何在Windows Universal应用程序中使用自定义字体?

  7. 7

    如何在Android中为整个应用程序设置自定义字体?

  8. 8

    如何在棒棒糖中为整个应用程序设置自定义字体

  9. 9

    如何以编程方式更新应用程序配置文件中的自定义属性

  10. 10

    如何以编程方式从自定义PHP应用程序创建WordPress帖子?

  11. 11

    如何在iOS应用程序中将自定义字体系列设置为系统字体

  12. 12

    如何在iOS中使用.ttc自定义字体

  13. 13

    在角度应用程序中使用自定义Webpack

  14. 14

    如何将应用程序字体更改为自定义字体

  15. 15

    如何在Heroku / Perl Web应用程序中使用自定义模块?

  16. 16

    如何在Xcode中以编程方式在iOS中使用自定义字体(例如:Helvetica CY.ttf)

  17. 17

    是否可以在Xubuntu的“键盘”设置中使用单个自定义键盘快捷方式启动多个应用程序?

  18. 18

    整个应用程序的自定义格式

  19. 19

    整个应用程序的自定义格式

  20. 20

    向laravel应用程序添加自定义字体

  21. 21

    Android应用程序的自定义字体

  22. 22

    如何将自定义Controltemplate设置为整个应用程序的默认值?

  23. 23

    如何在我的应用程序中嵌入自定义字体

  24. 24

    如何在Angular应用程序中导入PDFMake的自定义字体?

  25. 25

    如何在Rails应用程序中用自定义图标替换字体真棒图标

  26. 26

    如何为所有文本声明应用程序范围的自定义字体

  27. 27

    使用的特定自定义字体在android应用程序中不起作用

  28. 28

    在Android Studio中为科学计算器应用程序使用自定义字体

  29. 29

    如何使用自定义应用程序替换Windows 10上的登录应用程序

热门标签

归档