iOS10字体宽度比之前多一个像素,高度不变,这个是个坑,需要注意一下!
这个问题会导致有些本来好的地方,到了iOS10就展示不开了。这里使用runtime做一个统一的处理。
#import "UIFont+MyFont.h"
#import@implementation UIFont (MyFont)
/**
*runtime注册方法替换
*/
+(void)load{
//只执行一次这个方法
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
Class class = [self class];
// When swizzling a class method, use the following:
//获取替换前的类方法
Method instance_eat =
class_getClassMethod(class, @selector(systemFontOfSize:));
//获取替换后的类方法
Method instance_notEat =
class_getClassMethod(self, @selector(RoadSystemFontOfSize:));
//然后交换类方法
method_exchangeImplementations(instance_eat, instance_notEat);
});
}
+(UIFont *)RoadSystemFontOfSize:(CGFloat)fontSize{
if ([[[UIDevice currentDevice] systemVersion] floatValue]>=10) {
fontSize = fontSize * 0.95;
}
UIFont *newFont = [ UIFont preferredFontForTextStyle : UIFontTextStyleBody ];
UIFontDescriptor *ctfFont = newFont.fontDescriptor ;
NSString *fontString = [ctfFont objectForKey : @"NSFontNameAttribute"];
//使用 fontWithName 设置字体
return [UIFont fontWithName:fontString size:fontSize];
}
@end
写在最后:
Runtime是实现OC动态化的核心c库,Runtime不是用来装逼的,理解并合理运用,会有出乎意料的效果。