web-dev-qa-db-fra.com

Comment utiliser la nouvelle police San Francisco dans iOS 9?

Avant iOS 9 pour faire référence aux polices, nous utilisions fontWithName sur UIFont:

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

Nous passons maintenant à iOS 9. Comment référencer un nouveau police de San Francisco de la même manière?

Nous pouvons l'utiliser avec systemFontOfSize de UIFont, mais comment référencer des styles autres que réguliers? Par exemple, comment utiliser les polices San Francisco Medium ou San Francisco Light?

49
alexey

Dans iOS 9, il s’agit de la police système, vous pouvez donc:

let font = UIFont.systemFontOfSize(18)

Vous pouvez utiliser directement le nom de la police, mais je ne pense pas que cela soit sans danger:

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

Vous pouvez également créer la police avec poids spécifique , comme suit:

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

ou

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

Swift 4

label.font = UIFont.systemFont(ofSize: 22, weight: UIFont.Weight.bold)
5
Marcos Dávalos

Détails

  • Xcode version 10.2.1 (10E1001), Swift 5

Solution

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)
    }
}

Usage

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

// ...

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