iOS开发攻城狮的集散地iOS 开发每天分享优质文章人猿星球

使用runTime交换系统方法适配字体大小

2017-05-31  本文已影响16381人  flowerflower

最近两天公司有点小悠闲,于是就自己瞎转悠。最近沉迷于Python的学习路上,手指忽然间痒痒了,就玩玩OC中的runtime吧。
适配字体大小的问题,我想其他开发同事也遇到过此种问题,如果直接使用UIFont systemFontOfSize设置字体大写,可能会出现在6/6s上看着刚刚好的样子,在5/5s明显感觉字体大了,而在6p/7p上又感觉字体小了。对于此类问题 我们可以采取以下两种方式解决

方式一:

#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)


#define Screen_Height [UIScreen mainScreen].bounds.size.height
#define Screen_Width [UIScreen mainScreen].bounds.size.width

#define SCREEN_MAX_LENGTH (MAX(Screen_Width, Screen_Height))
#define SCREEN_MIN_LENGTH (MIN(Screen_Width, Screen_Height))

#define IS_IPHONE_4_OR_LESS (IS_IPHONE && SCREEN_MAX_LENGTH < 568.0)
#define IS_IPHONE_5 (IS_IPHONE && SCREEN_MAX_LENGTH == 568.0)
#define IS_IPHONE_6 (IS_IPHONE && SCREEN_MAX_LENGTH == 667.0)
#define IS_IPHONE_6P (IS_IPHONE && SCREEN_MAX_LENGTH == 736.0)

#define kFont(F)                                [UIFont systemFontOfSize:F]

_comeinBtn.titleLabel.font = IS_IPHONE_5?kFont(12):kFont(14);


方式二:(利用runTime给UIFont写分类 替换系统自带的方法) 推荐使用此种

//UI设计原型图的手机尺寸宽度为基准(6p)
#define YourUIScreen 414    
+(void)load{
    //获取替换后的类方法
    Method newMethod = class_getClassMethod([self class], @selector(adjustFont:));
    //获取替换前的类方法
    Method method = class_getClassMethod([self class], @selector(systemFontOfSize:));
    //然后交换类方法
    method_exchangeImplementations(newMethod, method);
}
+(UIFont *)adjustFont:(CGFloat)fontSize{
    UIFont *newFont=nil;
    newFont = [UIFont adjustFont:fontSize * [UIScreen mainScreen].bounds.size.width/YourUIScreen];
    return newFont;
}

总结

第一种方式的话(笨拙式),需要每次都进行三目运算给字体大小,而方式二(高端大气上档次式)直接使用即可,会自动算出字体大小。6一点。。
上一篇 下一篇

猜你喜欢

热点阅读