如何在 iOS 9 中使用新的 San Francisco 字体?

Posted

技术标签:

【中文标题】如何在 iOS 9 中使用新的 San Francisco 字体?【英文标题】:How to use new San Francisco font in iOS 9? 【发布时间】:2015-09-30 21:52:14 【问题描述】:

iOS 9 之前我们使用 fontWithNameUIFont 引用字体:

[UIFont fontWithName:@"HelveticaNeue" size:18]

现在我们正在迁移到 ios 9。如何以同样的方式引用新的 San Francisco 字体

我们可以将它与systemFontOfSizeUIFont 一起使用,但是如何引用常规以外的样式?例如,如何使用 San Francisco MediumSan Francisco Light 字体?

【问题讨论】:

这听起来像是 iOS9 开发者文档中的内容。你看过那里了吗? (如果是这样,但它不在那里,那值得你回答。如果不是,第一步是看那里) 【参考方案1】:

在 iOS 9 中它是系统字体,所以你可以这样做:

let font = UIFont.systemFontOfSize(18)

可以直接使用字体名称,但我认为这不安全:

let font = UIFont(name: ".SFUIText-Medium", size: 18)!

您也可以使用specific weight 创建字体,如下所示:

let font = UIFont.systemFontOfSize(18, weight: UIFontWeightMedium)

let font = UIFont.systemFontOfSize(18, weight: UIFontWeightLight)

【讨论】:

有没有官方的使用 Medium 或 Light 的方法? 只是强调一下:MirekE 是正确的,使用.SFUIText-Medium 或任何其他确切的旧金山名称是不安全的。苹果公司表示,这些名称是私有的,可能会发生变化。他们希望您使用UIFontNSFont 中内置的系统字体方法,特别是因为他们保留根据用户情况修改系统字体的权利。 当然,如果你真的需要一个字体名称,let fontName = UIFont.systemFontOfSize(18, weight: UIFontWeightLight).fontName,这样如果私有名称发生变化,你会自动检索到正确的。 我在 iOS 9 上使用 SF weightlight 字体来制作自定义键盘,但问题是它看起来比默认字体轻。我试过切换常规和中等字体,但它与默认 iOS 键盘上的文本完全不同?! 有没有办法在 UIWebView 上使用这种字体?【参考方案2】:

斯威夫特 4

label.font = UIFont.systemFont(ofSize: 22, weight: UIFont.Weight.bold)

【讨论】:

这有办法区分SFUITextSFUIDisplay吗?【参考方案3】:

详情

Xcode 版本 10.2.1 (10E1001),Swift 5

解决方案

import UIKit

extension UIFont 

    enum Font: String 
        case SFUIText = "SFUIText"
        case SFUIDisplay = "SFUIDisplay"
    

    private static func name(of weight: UIFont.Weight) -> String? 
        switch weight 
            case .ultraLight: return "UltraLight"
            case .thin: return "Thin"
            case .light: return "Light"
            case .regular: return nil
            case .medium: return "Medium"
            case .semibold: return "Semibold"
            case .bold: return "Bold"
            case .heavy: return "Heavy"
            case .black: return "Black"
            default: return nil
        
    

    convenience init?(font: Font, weight: UIFont.Weight, size: CGFloat) 
        var fontName = ".\(font.rawValue)"
        if let weightName = UIFont.name(of: weight)  fontName += "-\(weightName)" 
        self.init(name: fontName, size: size)
    

用法

guard let font = UIFont(font: .SFUIText, weight: .light, size: 14) else  return 

// ...

let font = UIFont(font: .SFUIDisplay, weight: .bold, size: 17)!

【讨论】:

以上是关于如何在 iOS 9 中使用新的 San Francisco 字体?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 9 新的反向链接功能中检测用户返回到您的应用程序?

如何使用 iOS 9.2 新的“连续手指检测”Touch ID 功能

如何从我的应用程序中删除新的返回上一个应用程序 iOS 9 按钮?

SAN,NAS,DAS及iSCSI其架构之间区别

核心数据搜索优化

如何在局域网内访问 Synology NAS 上的文件