1.适配方案总结
1.等比例缩放+加减->1.1按不同机型或屏幕宽等比缩放->1.2按不同机型或屏幕宽加减
2.runtime方法替换
2.参考文章
3.不同机型的物理尺寸图和分辨率数据
img.jpg4.字体适配方案
4.1 使用宏根据屏幕宽度或者机型来适配
使用场景:纯代码,不同屏幕显示字号有UI规范
//1.在PCH文件中定义宏,调用UIFont的分类方法
#define FontCaseOne(F) [UIFont fontSize:(F)]
//2. UIFont(FitFont) 分类方法实现,此处采用的方案是375屏宽以上字体+1,375屏宽以上字体-1
+ (UIFont *)fontSize:(CGFloat)font {
if (SCREEN_WIDTH == 320) {
return [UIFont systemFontOfSize:(font - 1)];
}else if (SCREEN_WIDTH == 375){
return [UIFont systemFontOfSize:font];
}else{
return [UIFont systemFontOfSize:(font + 1 )];
}
}
4.2 用宏定义适配字体大小(根据屏幕尺寸判断)
1.5代表6P尺寸的时候字体为1.5倍,5S和6尺寸时大小一样,也可根据需求自定义比例。
#define IsIphone6P SCREEN_WIDTH==414
#define SizeScale (IsIphone6P ? 1.5 : 1)
#define kFontSize(value) value*SizeScale
#define kFont(value) [UIFont systemFontOfSize:value*SizeScale]
4.3 根据屏幕高度做字体适配
使用场景:纯代码,UI组件竖屏流体居多,根据屏幕宽度做不同字体适配,但是适配方案是根据屏幕高度的比例来做
//1.在PCH文件中定义宏,方便调用,调用UIFont的分类方法
#define FontCaseTwo(F) [UIFont fit_screenWidith:(F)]
#define FitHeight(H) [UIView fit_screenHeight:(H)]
//2. UIView (Fit)方法实现,实现fit_screenHeight方法
+ (CGFloat)fit_screenHeight:(CGFloat)height {
CGFloat H = (height / 667.000 * [UIScreen mainScreen].bounds.size.height);
return H;
}
//3. UIFont(FitFont) 分类方法实现,实现fit_screenWidith方法
+ (UIFont *)fit_screenWidith:(CGFloat)font {
if (SCREEN_WIDTH == 320) {
return [UIFont systemFontOfSize:FitHeight(font)];
}else if (SCREEN_WIDTH == 375){
return [UIFont systemFontOfSize:FitHeight(font)];
}else{
return [UIFont systemFontOfSize:FitHeight(font)];
}
}
4.4 根据屏幕高度,利用runtime方法交换适配
如果用了这个方案,整个调用系统的方案都会被修改,别的方案就没有效果了
// UIFont (RuntimeFit)实现
+ (void)load {
// 获取替换后的类方法,即自己的方法
Method selfMethod = class_getClassMethod([self class], @selector(runtimeFitFont:));
// 获取替换前的类方法,即系统方法
Method systenMethod = class_getClassMethod([self class], @selector(systemFontOfSize:));
//然后交换类方法,交换两个方法的IMP指针,(IMP代表了方法的具体的实现)
method_exchangeImplementations(selfMethod, systenMethod);
}
+ (UIFont *)runtimeFitFont:(CGFloat)fontSize {
UIFont *fitFont = nil;
//这里并不会造成递归调用,方法已经被交换
fitFont = [UIFont runtimeFitFont:fontSize * (SCREEN_WIDTH / 375 )];
return fitFont;
}
外部正常调用系统设置字体方法就行
UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(0, 150, [UIScreen mainScreen].bounds.size.width, 60)];
label.text = @"iOS字体大小适配";
label.font = [UIFont systemFontOfSize:16];
[self.view addSubview:label];
网友评论