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