之前写的项目都没有用到全局改变字体字体大小的功能,这不,最近看到很多APP都实现了这个功能。如果大家不清楚,可以看一下 微信APP——>设置——>通用——>字体大小,玩一下就知道了。
先附上代码:<a href = "https://github.com/smileKH/HBFontChange">HBFontChange</a>
1、先创建一个头文件HBFontHeader.h,需要设置的字体大小都写出来,相信一个APP的字体大小就十来种而已:
//测试字体大小
//比如说是标题大小
#define TITLE_FONT @"titleFontSize"
//内容字体大小
#define CONTENT_FONT @"contentFontSize"
//详情字体大小
#define DETAILS_FONT @"detailsFontSize"
#define ALL_FONT_CHANGE @"allFontChange"
static float FONT_TITLE_SIZE = 20.0;
static float FONT_CONTENT_SIZE = 16.0;
static float FONT_DETAILS_SIZE = 14.0;
2、在AppDelegate里初始化字体大小:
float titleFont = USERDEFAULT_float(TITLE_FONT);
if (titleFont==0) {
//一次性代码
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
//初始化
NSUserDefaults *fontDefaults = [NSUserDefaults standardUserDefaults];
//把所用的字体值保存下来
[fontDefaults setFloat:FONT_TITLE_SIZE forKey:TITLE_FONT];
[fontDefaults setFloat:FONT_CONTENT_SIZE forKey:CONTENT_FONT];
[fontDefaults setFloat:FONT_DETAILS_SIZE forKey:DETAILS_FONT];
[[NSUserDefaults standardUserDefaults] synchronize];
});
}
3、创建一个父类HBClassVC,好给每个控制器里的控件发消息
- (void)viewDidLoad {
[super viewDidLoad];
//接收通知
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(fontSizeChange) name:ALL_FONT_CHANGE object:nil];
}
-(void)fontSizeChange{
}
4、用属性创建控件
@interface HBLabelChangeVC ()
@property (nonatomic ,strong)UILabel *label;
@end
添加在view上
self.label = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 200, 30)];
self.label.backgroundColor = [UIColor redColor];
self.label.text = @"我是一个label";
self.label.center = self.view.center;
self.label.font = Font(USERDEFAULT_float(CONTENT_FONT));
[self.view addSubview:self.label];
监听到字体改变重新设置控件字体大小
#pragma mark - 监听到字体改变
-(void)fontSizeChange{
self.label.font = Font(USERDEFAULT_float(CONTENT_FONT));
}
附上图片:
全局改变字体1 全局改变字体2这个demo是本人个人想法,如有更好的方法,麻烦指导一下,谢谢!
END.
网友评论