【问题标题】:What is the system font of iOS13?iOS13的系统字体是什么?
【发布时间】:2020-01-06 00:56:36
【问题描述】:

iOS 13 系统字体是什么?

在 iOS 13 之前,我使用 SFUIDisplay 字体。

UIFont(name: ".SFUIDisplay-Light", size: UIFont.systemFontSize)

但在 iOS 13 上它不起作用。

【问题讨论】:

  • 不提供名称以使用系统字体
  • 我使用了很多自定义字体。我需要这样做
  • 尝试获取该字体的 fontName 和 familyName 然后检查您是否正在调用当前字体名称
  • 您是要在代码中执行此操作,还是想要明天可能会过时的当前系统字体?从问题中删除 swift 标签,或编辑问题以说明您想要一种在代码中获取当前字体的方法,而不知道它是什么。

标签: ios swift fonts


【解决方案1】:

这个bug太牛了。解决它的唯一方法是直接使用systemFont(ofSize:weight:) 方法。 AKA,您无法使用UIFont(name:size:) 方法获取系统字体,出于某种有趣的原因,您只会得到 Times New Roman。苹果开发者一定是在惹我们。因此,对于上面的原始问题,您必须使用以下内容:

UIFont(systemFont:UIFont.systemFontSize, weight: .light)

对于我的情况,我遇到了这个错误,为UIFont 进行了扩展以返回不同大小的相同字体,这必须与自定义字体和系统字体一起使用。为了让它在 xcode 11 ios 13 上工作,我不得不添加一个愚蠢的检查来查看 fontName 是否包含“.SF”。

extension UIFont {
    func forSize(_ pointSize: CGFloat) -> UIFont {
        if !fontName.contains(".SF"), let font = UIFont(name: fontName, size: pointSize) {
            return font
        }

        return UIFont.systemFont(ofSize: pointSize, weight: weight)
    }
}

【讨论】:

    【解决方案2】:

    font-family: ".SFCompactText-Regular";字体粗细:正常;字体样式:正常

    【讨论】:

    • 硬编码是不好的做法。此外,@Vladislav 要求提供代码,因此此答案无效。也许您希望查看您的关键 cmets 以获得其他答案?
    • 我只是指出他并没有问代码好不好。他显然不应该硬编码,但最终的问题是系统字体的名称是什么。纠正他的代码和意图,你做得太多了。
    【解决方案3】:

    如果你打算使用系统字体,你不必担心它的名字,你应该让系统为你做。

    let font = UIFont.systemFont(ofSize: UIFont.systemFontSize)
    

    此时,每当系统字体发生变化时,都会自动更新。

    此外

    我使用了很多自定义字体。我需要这样做

    实际上,如果您想使用系统字体,您可以在不提及字体名称的情况下这样做。例如,您可以实现一个返回正确字体的函数:

    func getFont(name: String = "", size: CGFloat = UIFont.systemFontSize) -> UIFont {
        // system font
        let defaultFont = UIFont.systemFont(ofSize: UIFont.systemFontSize)
    
        if name.isEmpty {
            return defaultFont
        }
    
        return UIFont(name: name, size: size) ?? defaultFont
    }
    

    使用系统字体,调用它:getFont()。否则,请在提及字体名称的情况下调用它:getFont(name: ".SFUIDisplay-Light")

    但是,您可能会考虑做这样的事情来获取系统字体名称,然后使用它:

    let systemFontName = UIFont.systemFont(ofSize: UIFont.systemFontSize).fontName
    getFont(name: systemFontName)
    

    我会说这是没有意义的,因为UIFont.systemFont会自动检测系统字体名称而无需提及。

    【讨论】:

      【解决方案4】:

      它是“San Francisco (SF) ProCompact”字体。你可以在这里查看https://developer.apple.com/fonts/

      【讨论】:

        【解决方案5】:

        使用systemFont(ofSize: CGFloat) -> UIFont 创建字体。

        然后获取该字体的fontNamefamilyName

        打印以上内容,你就有了当前 iOS 的答案;所以在 iOS 13 上运行它。

        【讨论】:

        • 他不是在问怎么做。
        • @mskw 希望/假设您同意硬编码字体名称是不好的做法,您有什么更好的选择?
        • 我同意,但我觉得实际的字体名称就是答案。不是他的代码应该是什么样子。
        • @DanielSpringer 或者 OP 可以使用我的答案打印答案。
        • 问题的问题是不清楚他们是否正在寻找一种方法来获取当前的系统字体(目前是iOS 13),并在它改变时自动获取下一个系统字体(代码),或者如果他们只是在寻找当前的字体名称,并且不在乎,一旦当前系统字体发生变化,他们拥有的任何字体名称都会过时。
        猜你喜欢
        • 2020-11-01
        • 1970-01-01
        • 2013-12-11
        • 1970-01-01
        • 2016-07-27
        • 2016-04-20
        • 2013-09-19
        • 1970-01-01
        • 2020-12-25
        相关资源
        最近更新 更多