IOS之全局改变字体大小

作者: 明似水 | 来源:发表于2016-12-17 15:34 被阅读2106次

之前写的项目都没有用到全局改变字体字体大小的功能,这不,最近看到很多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.

相关文章

网友评论

  • Sniper_Zheng:感谢分享
    明似水:@zz_lyou 大神请指教,能不能写个demo给我参考参考,谢谢!
    村长爱上猫:全局都要这样去改, 未免也太麻烦了. 应该是有一个类的扩展或者基类, 调用对应的方法, 每次修改直接通知到基类创建的时候就修改好. 如果工程已经完毕, 最好用运行时去替换字体大小的方法. 计算 cellFrame 也要提前知道字体, 方便去计算 cell 的高度缓存
    明似水:@Sniper_Zheng 谢谢支持
  • 挂着铃铛的兔:感谢分享
    明似水:@挂着铃铛的兔 有更好的方法可以讨论一下
    明似水:@挂着铃铛的兔 谢谢支持

本文标题:IOS之全局改变字体大小

本文链接:https://www.haomeiwen.com/subject/hsnomttx.html