Search code examples
iosios7uifont

Is it possible to use iOS 7's modified Helvetica in apps?


For iOS 7, Apple made a special modified version of Helvetica Thin/Light that has rounded periods and colons:

enter image description here

Compare this to using Helvetica-Neue Thin or Helvetica-Neue Light in Xcode:

enter image description here

Is it possible to develop apps with the special modified version with the rounded colons and periods?

EDIT: Turns out these round colons and periods are not custom designed by Apple, they are "character alternates" and you can see them in your favorite font glyph viewer.


Solution

  • Here's how to do it. Even reading the documentation, it's very unclear.

    First, you have to get the characteristics of a font, which will give you the constants to use in your UIFontDescriptorFeatureSettingsAttribute. I got mine from this post.

    This gives you feature type identifier keys, and your options for their values, the feature selector identifier keys.

    NSArray *timerDisplaySettings = @[
                                          @{ UIFontFeatureTypeIdentifierKey: @(6),
                                            UIFontFeatureSelectorIdentifierKey: @(1)
                                         },
                                          @{ UIFontFeatureTypeIdentifierKey: @(17),
                                            UIFontFeatureSelectorIdentifierKey: @(1)
                                            }];
    

    then you create a font descriptor by adding to a descriptor - this way you can specify the font name and family via UIFont:

    UIFont *font = [UIFont fontWithName:@"HelveticaNeue-UltraLight" size:32];
    
    UIFontDescriptor *originalDescriptor = [font fontDescriptor];
    UIFontDescriptor *timerDescriptor =[originalDescriptor fontDescriptorByAddingAttributes: @{ UIFontDescriptorFeatureSettingsAttribute: timerDisplaySettings }];
    

    Then, close the loop and create the font with your descriptor. (The size "0.0" simply means we aren't scaling it from its original size of 32.

    UIFont *timerFont = [UIFont fontWithDescriptor: timerDescriptor size:0.0];