如何使用字体名称加载iOS13默认字体?

How to load iOS 13 default font using font name?

我对 iOS 13 系统字体有一个奇怪的问题。我正在尝试使用字体名称加载 iOS 默认字体 San Francisco。但是由于一些 iOS 错误,它正在加载一些其他字体,如 Times New Roman。我很少看到这样的问题 here and 。但就我而言,我必须使用名称加载字体,因为我正在使用实用程序 class 在应用程序委托中全局设置字体名称。有什么方法可以使用 iOS 13 中的字体名称加载系统字体?

// Set font here
 MUIConstats.shared.defaultFontRegularName = UIFont.systemFont(ofSize: 17).fontName


 // Get font from here

 class func appFontRegularOf(size: CGFloat)-> UIFont{


        if let fontName = MUIConstats.shared.defaultFontRegularName {
            return UIFont(name:fontName, size: size) ?? UIFont.systemFont(ofSize:size)
        }else{
            return  UIFont.systemFont(ofSize:size)
        }

    }

您可以存储非系统字体的名称,但如果它是系统字体,则唯一允许存储的是它是系统字体这一事实。这是工会的绝佳机会:

enum WhatFont {
    case system
    case name(String)
    func fontOfSize(_ sz:CGFloat) -> UIFont? {
        switch self {
        case .system: return UIFont.systemFont(ofSize: sz)
        case .name(let name): return UIFont(name: name, size: sz)
        }
    }
}

测试一下:

let f1 = WhatFont.system
print(f1.fontOfSize(17))
let f2 = WhatFont.name("Georgia")
print(f2.fontOfSize(17))