You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取特定字重的SF Pro Display斜体系统字体?

获取特定字重的San Francisco Pro斜体系统字体

你说得完全没错——iOS系统自带的UIFont.systemFont(ofSize:weight:)确实只能拿到非斜体的全字重字体,而UIFont.italicSystemFont(ofSize:)也仅能获取Regular字重的斜体版本。要拿到像「SF Pro Display Heavy Italic」这类特定字重的斜体系统字体,确实得用到UIFont(name: String, size: CGFloat),但我们可以通过封装来避免重复写繁琐的字体名称字符串。

第一步:明确San Francisco Pro的斜体字体名称

先把常用字重和对应的官方字体名称对应好,以SF Pro Display为例:

  • 超轻斜体:SFProDisplay-UltralightItalic
  • 细斜体:SFProDisplay-ThinItalic
  • 轻斜体:SFProDisplay-LightItalic
  • 常规斜体:SFProDisplay-Italic(就是系统italicSystemFont对应的字体)
  • 中等斜体:SFProDisplay-MediumItalic
  • 半粗斜体:SFProDisplay-SemiboldItalic
  • 粗斜体:SFProDisplay-BoldItalic
  • 重斜体:SFProDisplay-HeavyItalic
  • 特粗斜体:SFProDisplay-BlackItalic

如果是用于正文的SF Pro Text系列,只需要把名称里的Display替换成Text即可,比如SFProText-HeavyItalic。

第二步:封装成UIFont扩展,简化调用

为了不用每次手动敲字体名称,我们可以给UIFont写个扩展,模仿系统方法的调用逻辑:

extension UIFont {
    /// 获取指定字重的SF Pro Display斜体字体
    static func displayItalicSystemFont(ofSize size: CGFloat, weight: UIFont.Weight) -> UIFont? {
        let fontName: String
        switch weight {
        case .ultraLight:
            fontName = "SFProDisplay-UltralightItalic"
        case .thin:
            fontName = "SFProDisplay-ThinItalic"
        case .light:
            fontName = "SFProDisplay-LightItalic"
        case .regular:
            fontName = "SFProDisplay-Italic"
        case .medium:
            fontName = "SFProDisplay-MediumItalic"
        case .semibold:
            fontName = "SFProDisplay-SemiboldItalic"
        case .bold:
            fontName = "SFProDisplay-BoldItalic"
        case .heavy:
            fontName = "SFProDisplay-HeavyItalic"
        case .black:
            fontName = "SFProDisplay-BlackItalic"
        default:
            fontName = "SFProDisplay-Italic"
        }
        return UIFont(name: fontName, size: size)
    }
    
    /// 获取指定字重的SF Pro Text斜体字体
    static func textItalicSystemFont(ofSize size: CGFloat, weight: UIFont.Weight) -> UIFont? {
        let fontName: String
        switch weight {
        case .ultraLight:
            fontName = "SFProText-UltralightItalic"
        case .thin:
            fontName = "SFProText-ThinItalic"
        case .light:
            fontName = "SFProText-LightItalic"
        case .regular:
            fontName = "SFProText-Italic"
        case .medium:
            fontName = "SFProText-MediumItalic"
        case .semibold:
            fontName = "SFProText-SemiboldItalic"
        case .bold:
            fontName = "SFProText-BoldItalic"
        case .heavy:
            fontName = "SFProText-HeavyItalic"
        case .black:
            fontName = "SFProText-BlackItalic"
        default:
            fontName = "SFProText-Italic"
        }
        return UIFont(name: fontName, size: size)
    }
}

第三步:轻松调用封装后的方法

现在你可以像调用系统方法一样获取特定字重的斜体字体了:

// 获取24号的SF Pro Display Heavy Italic
let heavyItalicDisplayFont = UIFont.displayItalicSystemFont(ofSize: 24, weight: .heavy)

// 获取16号的SF Pro Text Medium Italic
let mediumItalicTextFont = UIFont.textItalicSystemFont(ofSize: 16, weight: .medium)

补充说明

这些字体名称是苹果官方标准命名,在iOS 9及以上系统都能正常使用,不用担心兼容性问题。如果你的App需要兼容更早的系统,可以额外加个字体存在性判断,但现在绝大多数App都不用考虑iOS 8及以下的情况了。

内容的提问来源于stack exchange,提问作者Marmelador

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:27:38