How to use a custom font with dynamic text sizes in iOS7

前端 未结 12 2077
长情又很酷
长情又很酷 2020-11-29 14:41

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

12条回答
  •  萌比男神i
    2020-11-29 15:30

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

提交回复
热议问题