最近两天公司有点小悠闲,于是就自己瞎转悠。最近沉迷于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;
}