Подтвердить что ты не робот

Как использовать новый шрифт San Francisco в iOS 9?

До iOS 9 для ссылки на шрифты мы использовали fontWithName of UIFont:

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

Теперь мы переходим к iOS 9. Как ссылаться на новый шрифт Сан-Франциско таким же образом?

Мы можем использовать его с systemFontOfSize в UIFont, но как ссылаться на стили, отличные от обычных? Например, как использовать шрифты San Francisco Medium или San Francisco Light?

4b9b3361

Ответ 1

В iOS 9 это системный шрифт, поэтому вы можете сделать:

let font = UIFont.systemFontOfSize(18)

Вы можете напрямую использовать имя шрифта, но я не думаю, что это безопасно:

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

Вы также можете создать шрифт с конкретным весом, например:

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

или

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

Ответ 2

Swift 4

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

Ответ 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)!