Skip to content

Instantly share code, notes, and snippets.

@VincentSit
Forked from steipete/UIFont+PSPDF.m
Created December 21, 2017 17:51
Show Gist options
  • Save VincentSit/2a725183fdc03f7627705337c720dbf2 to your computer and use it in GitHub Desktop.
Save VincentSit/2a725183fdc03f7627705337c720dbf2 to your computer and use it in GitHub Desktop.
@implementation UIFont (PSPDFAdditions)
// https://gist.github.com/nuthatch/7594460
static CGFloat PSPDFMultiplicatorForPreferredContentSize(void) {
CGFloat multiplicator = 1.f;
NSString *preferredTextStyle = UIApplication.sharedApplication.preferredContentSizeCategory;
if ([preferredTextStyle isEqualToString:UIContentSizeCategoryExtraSmall]) {
multiplicator = 0.9f;
}else if ([preferredTextStyle isEqualToString:UIContentSizeCategorySmall]) {
multiplicator = 0.95f;
}else if ([preferredTextStyle isEqualToString:UIContentSizeCategoryMedium]) {
multiplicator = 1.f;
}else if ([preferredTextStyle isEqualToString:UIContentSizeCategoryLarge]) {
multiplicator = 1.1f;
}else if ([preferredTextStyle isEqualToString:UIContentSizeCategoryExtraLarge]) {
multiplicator = 1.2f;
}else if ([preferredTextStyle isEqualToString:UIContentSizeCategoryExtraExtraLarge]) {
multiplicator = 1.25f;
}else if ([preferredTextStyle isEqualToString:UIContentSizeCategoryExtraExtraExtraLarge]) {
multiplicator = 1.3f;
}
return multiplicator;
}
static CGFloat PSPDFFontSizeForTextStyle(NSString *textStyle, BOOL *isBold) {
PSPDFAssert(textStyle);
CGFloat fontSize = 12.f;
if ([textStyle isEqualToString:UIFontTextStyleHeadline]) {
fontSize = 17.f;
if (isBold) *isBold = YES;
}else if ([textStyle isEqualToString:UIFontTextStyleBody]) {
fontSize = 17.f;
}else if ([textStyle isEqualToString:UIFontTextStyleSubheadline]) {
fontSize = 15.f;
}else if ([textStyle isEqualToString:UIFontTextStyleFootnote]) {
fontSize = 13.f;
}else if ([textStyle isEqualToString:UIFontTextStyleCaption1]) {
fontSize = 12.f;
}else if ([textStyle isEqualToString:UIFontTextStyleCaption2]) {
fontSize = 11.f;
}
// Return sharp sizes.
return floor(fontSize * PSPDFMultiplicatorForPreferredContentSize());
}
+ (UIFont *)pspdf_preferredFontWithName:(NSString *)name textStyle:(NSString *)textStyle {
PSPDFAssert(name);
PSPDFAssert(textStyle);
BOOL isBold = NO;
CGFloat fontSize = PSPDFFontSizeForTextStyle(textStyle, &isBold);
UIFont *font = [UIFont fontWithName:name size:fontSize];
if (isBold) font = font.pspdf_boldFont;
return font;
}
+ (UIFont *)pspdf_systemFontOfDynamicSize:(CGFloat)fontSize {
return [UIFont systemFontOfSize:fontSize * PSPDFMultiplicatorForPreferredContentSize()];
}
+ (UIFont *)pspdf_boldSystemFontOfDynamicSize:(CGFloat)fontSize {
return [UIFont boldSystemFontOfSize:fontSize * PSPDFMultiplicatorForPreferredContentSize()];
}
- (UIFont *)pspdf_boldFont {
UIFontDescriptor *descriptor = [self fontDescriptor];
descriptor = [descriptor fontDescriptorWithSymbolicTraits:descriptor.symbolicTraits|UIFontDescriptorTraitBold];
return [UIFont fontWithDescriptor:descriptor size:0]; // Pass 0 to keep the same font size
}
@end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment