1. 程式人生 > >iOS字型大小適配的幾種方法

iOS字型大小適配的幾種方法

在iOS開發中,有些公司對字型也有適配要求,為了讓字型美觀,所以在不同尺寸的螢幕上字型大小也要做到適配。
自己總結了幾種方法供大家參考。

方法一:用巨集定義適配字型大小(根據螢幕尺寸判斷)

//巨集定義
#define SCREEN_WIDTH ([UIScreen mainScreen].bounds.size.width)
#define FONT_SIZE(size) ([UIFont systemFontOfSize:FontSize(size))

/**
 *  字型適配 我在PCH檔案定義了一個方法
 */
static inline CGFloat FontSize(CGFloat fontSize){
    if (SCREEN_WIDTH==320) {
        return fontSize-2;
    }else if (SCREEN_WIDTH==375){
        return fontSize;
    }else{
        return fontSize+2;
    }
}

方法二:用巨集定義適配字型大小(根據螢幕尺寸判斷)

1.5代表6P尺寸的時候字型為1.5倍,5S和6尺寸時大小一樣,也可根據需求自定義比例。
程式碼如下:

#defineIsIphone6P SCREEN_WIDTH==414#defineSizeScale (IsIphone6P ? 1.5 : 1)#definekFontSize(value) value*SizeScale#definekFont(value) [UIFont systemFontOfSize:value*SizeScale]

方法三:(利用runTime給UIFont寫分類 替換系統自帶的方法)推薦使用這種

class_getInstanceMethod得到類的例項方法 class_getClassMethod得到類的類方法1.首先需要建立一個UIFont的分類2.自己UI設計原型圖的手機尺寸寬度#defineMyUIScreen 375 // UI設計原型圖的手機尺寸寬度(6), 6p的--414

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:));
    // 然後交換類方法,交換兩個方法的IMP指標,(IMP代表了方法的具體的實現)
    method_exchangeImplementations(newMethod, method);
}

+ (UIFont *)adjustFont:(CGFloat)fontSize {
    UIFont *newFont = nil;
    newFont = [UIFont adjustFont:fontSize * [UIScreen mainScreen].bounds.size.width/MyUIScreen];
    return newFont;
}
@end

外部正常呼叫系統設定字型方法就行

load方法只會走一次,利用runtime的method進行方法的替換 替換的方法裡面(把系統的方法替換成我們自己寫的方法),這裡要記住寫自己的方法,不然會死迴圈 之後凡是用到systemFontOfSize方法的地方,都會被替換成我們自己的方法,即可改字型大小了 注意:此方法只能替換 純程式碼 寫的控制元件字號,如果你用xib建立的控制元件且在xib裡面設定的字號,那麼替換不了!你需要在xib的 awakeFromNib方法裡面手動設定下控制元件字型


作者:深藍_S
連結:https://www.jianshu.com/p/7a6106f952d3
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。