Unfortunately, both +[UIFont preferredFontForTextStyle:]
and +[UIFontDescriptor preferredFontDescriptorWithTextStyle:]
rely on -[UIApplication preferredContentSizeCategory]
internally. They use a private function _CTFontDescriptorCreateWithTextStyle
to retrieve a CoreText font descriptor with specific text style and size category, and that's eventually based on a category → size mapping from the configuration file CoreTextConfig.plist
stored somewhere, but I assume you wouldn't want to use private APIs.
While hesitantly implying a possibility to dynamically swizzle -[UIApplication preferredContentSizeCategory]
to trick +[UIFontDescriptor preferredFontDescriptorWithTextStyle:]
into returning a font descriptor for the size class you want, I can't recommend any specific approach to this. You can retrieve a font descriptor like this:
let descriptor = UIFontDescriptor(fontAttributes: [ UIFontDescriptorTextStyleAttribute : UIFontTextStyleBody ])
but it won't contain a size attribute, so you would be left with trying to come up with a category → size mapping yourself.