iOS大咖说

iOS app内字体大小修改

2019-10-31  本文已影响0人  水煮杰尼龟

  有些项目里面可能需要做app内部字体大小修改的功能,这分为俩种情况:1.项目1.0就有这需求, 2.项目后期要加这个需求。
  正好近期做的项目有这个需求,而且是后者,后期版本才要加的。如果是项目开始就有这需求,可能你可以做一些基类,来处理全局的字体大小变化。自己也花了点时间研究了一些,参考了些,看了微信的字体大小切换就很流畅。字体大小的变化,最烦的可能就是UI的调整了。其实我自己项目里用的是最简单的方式,设置完字体重启app,而切换字体大小之后,我只是改变当前页面所有的字体大小(更简单的就是新画一个UI改变字体,改完再重启,我这种实际每次改动都修改了当前页面的字体,这就导致我还存了上次的字体大小,来处理用户调完字体大小但是最后取消的情况),嘿嘿。但是还是记录一些其他的处理吧
先放Demo吧

如果页面frame什么的不是自适应的话还是重启吧,不然太麻烦了。要做的话我感觉你得把所有已存在的界面UI都刷新一遍把,未出现的界面frame也得跟着font自适应。
我demo的做法也只是修改了字体,随便加了几个高度自适应的label而已,演示一下效果,提供一点思路。

首先看下demo用到的几个文件把(具体作用demo里都有注释)
demo文件

放一点改变字体大小的代码吧,顺便做了一下富文本的判断。

//MARK: - 改变字体
-(void)switchLanguageFont{

    if (self.isSetAttributedText) {
        NSRange range1 = NSMakeRange(0, self.attributedText.string.length);
        NSMutableAttributedString *mutString = [self.attributedText mutableCopy];
        [mutString enumerateAttribute:NSFontAttributeName
                              inRange:range1
                              options:(NSAttributedStringEnumerationReverse) usingBlock:^(UIFont *value, NSRange range, BOOL * _Nonnull stop){
                                  if (value) {
                                      *stop = YES;
                                      [mutString addAttribute:NSFontAttributeName value:[self getNewFontWithOld:value] range:range];
                                      
                                  }else{
                                      [mutString addAttribute:NSFontAttributeName value:[self getNewFontWithOld:self.font] range:range];
                                  }
                              }];
        self.attributedText = mutString;
        
    }else{
        self.font = [self getNewFontWithOld:self.font];
    }
}
//MARK: - 通过老font 获取新font
-(UIFont *)getNewFontWithOld:(UIFont *)font{
    NSString *preFont = [[NSUserDefaults standardUserDefaults]objectForKey:kPreLocalTextFont];
    NSString *currentFont = [[NSUserDefaults standardUserDefaults]objectForKey:kLocalTextFont];
    
    UIFont *oldFont = font;
    CGFloat newfontSize = oldFont.pointSize + [currentFont integerValue] - [preFont integerValue];
    NSString *fontName = oldFont.fontName;
    
    return [UIFont fontWithName:fontName size:newfontSize];
}
上一篇下一篇

猜你喜欢

热点阅读