UIFont
provides the +preferredFontForTextStyle:
method to get a font instance with the proper size based on the user's selected content size category and the given UIFontTextStyle
.
What I would like to do is get a font for a given text style and content size. Something like +fontForContentSizeCategory:andTextStyle:
.
Unfortunately I cannot find anything similar to that in the headers for UIFont
or UIFontDescriptor
.
Any idea on how to achieve this?
Thanks
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 fileCoreTextConfig.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:but it won't contain a size attribute, so you would be left with trying to come up with a category → size mapping yourself.