APP开发中,美工给的图和字体都是按照6p的尺寸给的,代码设定字体后,大屏手机还好,小屏手机就不好看了,设置字体的地方太多,如果一个个去修改,那么将很繁琐。
此时我们可以通过新建一个UIFont的类别(category)来重写系统的systemFontOfSize方法
代码如下:
UIFont+MyFont.h
#import <UIKit/UIKit.h>
@interface UIFont (MyFont)
+(UIFont *)systemFontOfSize:(CGFloat)fontSize;
@end
UIFont+MyFont.m
#import "UIFont+MyFont.h"
#define screenHeight [UIScreen mainScreen].bounds.size.height
@implementation UIFont (MyFont)
+(UIFont*)systemFontOfSize:(CGFloat)fontSize{
//根据屏幕尺寸判断的设备,然后字体设置为0.8倍
if (screenHeight < 568) {
fontSize = fontSize * 0.8;
}
UIFont *newFont = [UIFont preferredFontForTextStyle:UIFontTextStyleBody];
UIFontDescriptor *ctfFont = newFont.fontDescriptor;
NSString *fontString = [ctfFont objectForKey:@"NSFontNameAttribute"];
//使用fontWithName 设置字体
return [UIFont fontWithName:fontString size:fontSize];
}
@end
示例如下图:
注:三个#pragma是为了消除类别重写系统API时带来的警告。