Skip to content

Repository for my Medium article "Use Dynamic Type with Custom Fonts in iOS"

Notifications You must be signed in to change notification settings

hdmdhr/CustomDynamicType

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 

Repository files navigation

CustomDynamicType

Repository for my Medium article Use Dynamic Type with Custom Fonts in iOS

Difficulty Level: Beginner | Easy | Normal | Challenging

The content of this article was developed using Xcode 13.4 and Swift 5.

If you prefer a video version of the same content, please take a look at my video tutorial (coming soon)!

Core logic: CustomFont enum

enum CustomFont: CustomStringConvertible {
    
    static let largeTitle = playfairDisplay(weight: .Bold).font(textStyle: .largeTitle, defaultSize: 40)
    static let headline = robotoMono(weight: .MediumItalic).font(textStyle: .headline)
    
    case robotoMono(weight: RobotoMonoWeight)
    case playfairDisplay(weight: PlayfairDisplayWeight)
    
    var description: String {
        switch self {
        case .robotoMono: return "RobotoMono"
        case .playfairDisplay: return "PlayfairDisplay"
        }
    }
    
    var weight: String {
        switch self {
        case .robotoMono(let weight): return weight.rawValue
        case .playfairDisplay(let weight): return weight.rawValue
        }
    }
    
    enum PlayfairDisplayWeight: String {
        case Regular, Italic
        case Medium, SemiBold, Bold, ExtraBold, Black
        case MediumItalic, SemiBoldItalic, BoldItalic, ExtraBoldItalic, BlackItalic
    }
    
    enum RobotoMonoWeight: String {
        case ExtraLight, Thin, Light
        case ExtraLightItalic, ThinItalic, LightItalic
        case Regular, Italic
        case Medium, Bold, SemiBold
        case MediumItalic, BoldItalic, SemiBoldItalic
    }
    
    func font(textStyle: UIFont.TextStyle, defaultSize: CGFloat? = nil) -> UIFont {
        // 1
        let fontName = [description, weight].joined(separator: "-")
        // 2
        let size = defaultSize ?? UIFontDescriptor.preferredFontDescriptor(withTextStyle: textStyle).pointSize
        // 3
        let fontToScale = UIFont(name: fontName, size: size) ?? .systemFont(ofSize: size)
        // 4
        return textStyle.metrics.scaledFont(for: fontToScale)
    }
    
}

About

Repository for my Medium article "Use Dynamic Type with Custom Fonts in iOS"

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages