SF: Monospaced numbers in iOS 9?

According to the WWDC presentation "Introducing the New System Fonts", the SF font has an option to display numbers as monospaced. I would like to use this option in several places in my iOS 9 app. In OS X it is apparently possible via NSFont.monospacedDigitSystemFontOfSize, but I did not find similar option in UIFont.


Can anybody point me to the right direction?

Accepted Reply

Ok, I figured this one out.


func systemFontWithMonospacedNumbers(size: CGFloat) -> UIFont {
    let features = [
        [
            UIFontFeatureTypeIdentifierKey: kNumberSpacingType,
            UIFontFeatureSelectorIdentifierKey: kMonospacedNumbersSelector
        ]
    ]

    let fontDescriptor = UIFont.systemFontOfSize(size).fontDescriptor().fontDescriptorByAddingAttributes(
        [UIFontDescriptorFeatureSettingsAttribute: features]
    )

    return UIFont(descriptor: fontDescriptor, size: size)
}

Replies

Ok, I figured this one out.


func systemFontWithMonospacedNumbers(size: CGFloat) -> UIFont {
    let features = [
        [
            UIFontFeatureTypeIdentifierKey: kNumberSpacingType,
            UIFontFeatureSelectorIdentifierKey: kMonospacedNumbersSelector
        ]
    ]

    let fontDescriptor = UIFont.systemFontOfSize(size).fontDescriptor().fontDescriptorByAddingAttributes(
        [UIFontDescriptorFeatureSettingsAttribute: features]
    )

    return UIFont(descriptor: fontDescriptor, size: size)
}

Swift 3 / XCode 9 update:


    func systemFontWithMonospacedNumbers(size: CGFloat) -> UIFont {
        let features = [
            [
                UIFontDescriptor.FeatureKey.featureIdentifier: kNumberSpacingType,
                UIFontDescriptor.FeatureKey.typeIdentifier: kMonospacedNumbersSelector
            ]
        ]
       
        let fontDescriptor = UIFont.systemFont(ofSize: size).fontDescriptor.addingAttributes(
            [UIFontDescriptor.AttributeName.featureSettings: features]
        )
       
        return UIFont(descriptor: fontDescriptor, size: size)
    }