In iOS7 there are new API\'s for getting a font that is automatically adjusted to the text size the user has set in their preferences.
It looks something like this to
Swift 2.1-3.0 code based on @smartDonkey's port of @Bob Spryn code. Also updated with the Apple sizes from @Klaas.
import UIKit
extension UIFontDescriptor {
private struct SubStruct {
static var preferredFontName: String = "Roboto-Light"
}
class func preferredDescriptor(textStyle: NSString) -> UIFontDescriptor {
struct Static {
static var onceToken : dispatch_once_t = 0
static var fontSizeTable : NSDictionary = NSDictionary()
}
dispatch_once(&Static.onceToken) {
Static.fontSizeTable = [
UIFontTextStyleHeadline: [
UIContentSizeCategoryAccessibilityExtraExtraExtraLarge: 23,
UIContentSizeCategoryAccessibilityExtraExtraLarge: 23,
UIContentSizeCategoryAccessibilityExtraLarge: 23,
UIContentSizeCategoryAccessibilityLarge: 23,
UIContentSizeCategoryAccessibilityMedium: 23,
UIContentSizeCategoryExtraExtraExtraLarge: 23,
UIContentSizeCategoryExtraExtraLarge: 21,
UIContentSizeCategoryExtraLarge: 19,
UIContentSizeCategoryLarge: 17,
UIContentSizeCategoryMedium: 16,
UIContentSizeCategorySmall: 15,
UIContentSizeCategoryExtraSmall: 14
],
UIFontTextStyleSubheadline: [
UIContentSizeCategoryAccessibilityExtraExtraExtraLarge: 21,
UIContentSizeCategoryAccessibilityExtraExtraLarge: 21,
UIContentSizeCategoryAccessibilityExtraLarge: 21,
UIContentSizeCategoryAccessibilityLarge: 21,
UIContentSizeCategoryAccessibilityMedium: 21,
UIContentSizeCategoryExtraExtraExtraLarge: 21,
UIContentSizeCategoryExtraExtraLarge: 19,
UIContentSizeCategoryExtraLarge: 17,
UIContentSizeCategoryLarge: 15,
UIContentSizeCategoryMedium: 14,
UIContentSizeCategorySmall: 13,
UIContentSizeCategoryExtraSmall: 12
],
UIFontTextStyleBody: [
UIContentSizeCategoryAccessibilityExtraExtraExtraLarge: 53,
UIContentSizeCategoryAccessibilityExtraExtraLarge: 47,
UIContentSizeCategoryAccessibilityExtraLarge: 40,
UIContentSizeCategoryAccessibilityLarge: 33,
UIContentSizeCategoryAccessibilityMedium: 28,
UIContentSizeCategoryExtraExtraExtraLarge: 23,
UIContentSizeCategoryExtraExtraLarge: 21,
UIContentSizeCategoryExtraLarge: 19,
UIContentSizeCategoryLarge: 17,
UIContentSizeCategoryMedium: 16,
UIContentSizeCategorySmall: 15,
UIContentSizeCategoryExtraSmall: 14
],
UIFontTextStyleCaption1: [
UIContentSizeCategoryAccessibilityExtraExtraExtraLarge: 18,
UIContentSizeCategoryAccessibilityExtraExtraLarge: 18,
UIContentSizeCategoryAccessibilityExtraLarge: 18,
UIContentSizeCategoryAccessibilityLarge: 18,
UIContentSizeCategoryAccessibilityMedium: 18,
UIContentSizeCategoryExtraExtraExtraLarge: 18,
UIContentSizeCategoryExtraExtraLarge: 16,
UIContentSizeCategoryExtraLarge: 14,
UIContentSizeCategoryLarge: 12,
UIContentSizeCategoryMedium: 11,
UIContentSizeCategorySmall: 11,
UIContentSizeCategoryExtraSmall: 11
],
UIFontTextStyleCaption2: [
UIContentSizeCategoryAccessibilityExtraExtraExtraLarge: 17,
UIContentSizeCategoryAccessibilityExtraExtraLarge: 17,
UIContentSizeCategoryAccessibilityExtraLarge: 17,
UIContentSizeCategoryAccessibilityLarge: 17,
UIContentSizeCategoryAccessibilityMedium: 17,
UIContentSizeCategoryExtraExtraExtraLarge: 17,
UIContentSizeCategoryExtraExtraLarge: 15,
UIContentSizeCategoryExtraLarge: 13,
UIContentSizeCategoryLarge: 11,
UIContentSizeCategoryMedium: 11,
UIContentSizeCategorySmall: 11,
UIContentSizeCategoryExtraSmall: 11
],
UIFontTextStyleFootnote: [
UIContentSizeCategoryAccessibilityExtraExtraExtraLarge: 19,
UIContentSizeCategoryAccessibilityExtraExtraLarge: 19,
UIContentSizeCategoryAccessibilityExtraLarge: 19,
UIContentSizeCategoryAccessibilityLarge: 19,
UIContentSizeCategoryAccessibilityMedium: 19,
UIContentSizeCategoryExtraExtraExtraLarge: 19,
UIContentSizeCategoryExtraExtraLarge: 17,
UIContentSizeCategoryExtraLarge: 15,
UIContentSizeCategoryLarge: 13,
UIContentSizeCategoryMedium: 12,
UIContentSizeCategorySmall: 12,
UIContentSizeCategoryExtraSmall: 12
],
]
}
let contentSize = UIApplication.sharedApplication().preferredContentSizeCategory
let style = Static.fontSizeTable[textStyle] as! NSDictionary
return UIFontDescriptor(name: SubStruct.preferredFontName, size: CGFloat((style[contentSize] as! NSNumber).floatValue))
}
}