iOS字體大小適配

在iOS中,有些公司對(duì)字體也有適配要求,可以最大程度上利用Objective-C的動(dòng)態(tài)語言特性,去適配。

class_getInstanceMethod得到類的實(shí)例方法
class_getClassMethod得到類的類方法

1. 首先需要?jiǎng)?chuàng)建一個(gè)UIFont的分類
2. 自己UI設(shè)計(jì)原型圖的手機(jī)尺寸寬度
#define MyUIScreen  375 // UI設(shè)計(jì)原型圖的手機(jī)尺寸寬度(6), 6p的--414
UIFont+runtime.h

#import <UIKit/UIKit.h>

@interface UIFont (runtime)

@end
UIFont+runtime.m

#import "UIFont+runtime.h"
#import <objc/runtime.h>

@implementation UIFont (runtime)

+ (void)load {
    // 獲取替換后的類方法
    Method newMethod = class_getClassMethod([self class], @selector(adjustFont:));
    // 獲取替換前的類方法
    Method method = class_getClassMethod([self class], @selector(systemFontOfSize:));
    // 然后交換類方法,交換兩個(gè)方法的IMP指針,(IMP代表了方法的具體的實(shí)現(xiàn))
    method_exchangeImplementations(newMethod, method);
}

+ (UIFont *)adjustFont:(CGFloat)fontSize {
    UIFont *newFont = nil;
    newFont = [UIFont adjustFont:fontSize * [UIScreen mainScreen].bounds.size.width/MyUIScreen];
    return newFont;
}
@end
Controller類中正常調(diào)用就行了:
UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(0, 150, [UIScreen mainScreen].bounds.size.width, 60)];
label.text = @"適配字體大小";
label.backgroundColor = [UIColor yellowColor];
label.font = [UIFont systemFontOfSize:16];
[self.view addSubview:label];

注意:
load方法只會(huì)走一次,利用runtime的method進(jìn)行方法的替換
替換的方法里面(把系統(tǒng)的方法替換成我們自己寫的方法),這里要記住寫自己的方法,不然會(huì)死循環(huán)
之后凡是用到systemFontOfSize方法的地方,都會(huì)被替換成我們自己的方法,即可改字體大小了
注意:此方法只能替換 純代碼 寫的控件字號(hào),如果你用xib創(chuàng)建的控件且在xib里面設(shè)置的字號(hào),那么替換不了!你需要在xib的
awakeFromNib方法里面手動(dòng)設(shè)置下控件字體

------整理

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Swift版本點(diǎn)擊這里歡迎加入QQ群交流: 594119878最新更新日期:18-09-17 About A cu...
    ylgwhyh閱讀 25,528評(píng)論 7 249
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,206評(píng)論 4 61
  • 你說楓葉苑央,后來琉璃滿堂 你說梨落晨起,后來梅盡芬芳 你說芊芊玉歌,后來一曲退場(chǎng) 你說一齊盛放 ,后來離散各方 ...
    尋芊閱讀 610評(píng)論 16 29
  • 簡(jiǎn)書這上面的文章為什么瀏覽量只有幾個(gè),是真的石沉大海了,還是寫的太差了,還是簡(jiǎn)書的排序規(guī)則有問題。
    軒驥閱讀 793評(píng)論 1 2
  • 我死后對(duì)這個(gè)世界有什么影響。朋友會(huì)忘記,父母悲傷過后會(huì)重新振作,世界會(huì)轉(zhuǎn),時(shí)間不會(huì)停止。那么我為什么還活著,我沒有...
    精神病人的精神世界閱讀 168評(píng)論 1 1