Swift 如何使用字体名称加载iOS 13默认字体?

Swift 如何使用字体名称加载iOS 13默认字体?,swift,fonts,ios13,xcode11,Swift,Fonts,Ios13,Xcode11,我对iOS 13系统字体有一个奇怪的问题。我试图加载iOS默认字体旧金山使用字体名称。但由于一些iOS错误,它正在加载一些其他字体,如Times New Roman。我很少看到像这样的问题。但在我的例子中,我必须加载带有name的字体,因为我正在使用一个实用程序类在app delegate中全局设置字体名称。有没有办法在iOS 13中使用字体名称加载系统字体 // Set font here MUIConstats.shared.defaultFontRegularName = UIFont.

我对iOS 13系统字体有一个奇怪的问题。我试图加载iOS默认字体旧金山使用字体名称。但由于一些iOS错误,它正在加载一些其他字体,如Times New Roman。我很少看到像这样的问题。但在我的例子中,我必须加载带有name的字体,因为我正在使用一个实用程序类在app delegate中全局设置字体名称。有没有办法在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))

不要使用或存储系统字体名称。仅将其称为系统字体。通过在
MUIConstats.shared.defaultFontRegularName
中存储一个简单的字符串名来实现这一点的想法是错误的。感谢您的回复,我可以知道为什么它是错误的吗?我之所以使用这种方法是出于各种原因。MUI实际上是我创建的一个框架。如果我使用自定义字体,我需要将字体文件添加到框架中。如果我使用字体而不是字体名称,我无法从app delegate进行设置。您不使用系统字体的名称,因为您自己发现它不受支持。苹果明确禁止这样做。我没有说你必须使用实际的字体对象;我说过,如果系统字体是一种可能,你就不能使用简单的名称。“你不使用系统字体的名称”,这意味着如果我不使用系统字体,我可以使用这种方法,对吗?错误是假设它是一个错误。你总是做错事;现在你被捕了。苹果对此非常清楚(请观看任何有关此主题的WWDC视频)。