ECGLayoutConstraint---多屏幕适配,自动计算各种屏幕下的布局以及字体大小
2017-03-06 16:03
537 查看
在实际开发中,由于要实现多屏幕适配,而我们的常见的UI设计,一般只会给我们一套 iphone6 的设计标准,但是适配又必须做,所以,下面的代码会帮你实现各个机型下的实际pt值,方便快捷。
这里会有两套标准:iPhone6 和 iPhone6P 两套标准,自己根据UI设计的标准自由选择。
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
typedef NS_ENUM(NSInteger,CYDeviceType) {
/** iphone4s */
CYDeviceTypeIphone4s,
/** iphone5 */
CYDeviceTypeIphone5,
/** iphone5s */
CYDeviceTypeIphone5s,
/** iphone6 */
CYDeviceTypeIphone6,
/** iphone6s */
CYDeviceTypeIphone6s,
/** iphone6p */
CYDeviceTypeIphone6p,
/** iphone7 */
CYDeviceTypeIphone7,
/** iphone7p */
CYDeviceTypeIphone7p
};
@interface LayoutConstraint : NSObject
/** 返回一个单例 */
+ (_Nullable instancetype)shareInstance;
/**
以 6 的px像素值作为基础来计算其他屏幕的pt值-->约束
@param value 6 的px像素值
@return 当前设备的pt值
*/
+ (CGFloat)getConstrainlWithValueFrom6:(CGFloat)value;
/**
以 6p 的px像素值作为基础来计算其他屏幕的pt值-->约束
@param value 6p 的px像素值
@return 当前设备的pt值
*/
+ (CGFloat)getConstrainlWithValueFrom6P:(CGFloat)value;
/**
以 6 为基准得到一个不同屏幕尺寸相对应的 font
@param fontSize <#fontSize description#>
@return 当前设备相对应的 font
*/
+ (UIFont * _Nullable)getAdjustsFont:(CGFloat)fontSize;
/**
以 6P 为基准得到一个不同屏幕尺寸相对应的 font
@param fontSize <#fontSize description#>
@return 当前设备相对应的 font
*/
+ (UIFont * _Nullable)getAdjustsFontFrom6P:(CGFloat)fontSize;
/**
以 6 为基准得到字体的字号大小
@param fontSize <#fontSize description#>
@return 当前设备字体的字号大小
*/
+ (CGFloat)getAdjustFontSize:(CGFloat)fontSize;
/**
以 6P 为基准得到字体的字号大小
@param fontSize <#fontSize description#>
@return 当前设备字体的字号大小
*/
+ (CGFloat)getAdjustFontSizeFrom6P:(CGFloat)fontSize;
/** 当前的设备型号 */
@property (nonatomic,assign,readonly)CYDeviceType deviceType;
@end
这里会有两套标准:iPhone6 和 iPhone6P 两套标准,自己根据UI设计的标准自由选择。
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
typedef NS_ENUM(NSInteger,CYDeviceType) {
/** iphone4s */
CYDeviceTypeIphone4s,
/** iphone5 */
CYDeviceTypeIphone5,
/** iphone5s */
CYDeviceTypeIphone5s,
/** iphone6 */
CYDeviceTypeIphone6,
/** iphone6s */
CYDeviceTypeIphone6s,
/** iphone6p */
CYDeviceTypeIphone6p,
/** iphone7 */
CYDeviceTypeIphone7,
/** iphone7p */
CYDeviceTypeIphone7p
};
@interface LayoutConstraint : NSObject
/** 返回一个单例 */
+ (_Nullable instancetype)shareInstance;
/**
以 6 的px像素值作为基础来计算其他屏幕的pt值-->约束
@param value 6 的px像素值
@return 当前设备的pt值
*/
+ (CGFloat)getConstrainlWithValueFrom6:(CGFloat)value;
/**
以 6p 的px像素值作为基础来计算其他屏幕的pt值-->约束
@param value 6p 的px像素值
@return 当前设备的pt值
*/
+ (CGFloat)getConstrainlWithValueFrom6P:(CGFloat)value;
/**
以 6 为基准得到一个不同屏幕尺寸相对应的 font
@param fontSize <#fontSize description#>
@return 当前设备相对应的 font
*/
+ (UIFont * _Nullable)getAdjustsFont:(CGFloat)fontSize;
/**
以 6P 为基准得到一个不同屏幕尺寸相对应的 font
@param fontSize <#fontSize description#>
@return 当前设备相对应的 font
*/
+ (UIFont * _Nullable)getAdjustsFontFrom6P:(CGFloat)fontSize;
/**
以 6 为基准得到字体的字号大小
@param fontSize <#fontSize description#>
@return 当前设备字体的字号大小
*/
+ (CGFloat)getAdjustFontSize:(CGFloat)fontSize;
/**
以 6P 为基准得到字体的字号大小
@param fontSize <#fontSize description#>
@return 当前设备字体的字号大小
*/
+ (CGFloat)getAdjustFontSizeFrom6P:(CGFloat)fontSize;
/** 当前的设备型号 */
@property (nonatomic,assign,readonly)CYDeviceType deviceType;
@end
#import "LayoutConstraint.h" @implementation LayoutConstraint + (instancetype)shareInstance { static ECGLayoutConstraint *_constraint; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _constraint = [[ECGLayoutConstraint alloc] init]; _constraint->_deviceType = [_constraint currentDeviceType]; }); return _constraint; } /** 以 6p 的px像素值作为基础来计算其他屏幕的pt值-->约束 @param value 6p 的px像素值 @return 当前设备的pt值 */ + (CGFloat)getConstrainlWithValueFrom6P:(CGFloat)value { ECGLayoutConstraint *layoutConstraint = [self shareInstance]; CGFloat constraint = 0; switch (layoutConstraint.deviceType) { case CYDeviceTypeIphone6: constraint = (CGFloat)((value *0.60335196f)/2); break ; case CYDeviceTypeIphone6s: constraint = (CGFloat)((value *0.60335196f)/2); break ; case CYDeviceTypeIphone7: constraint = (CGFloat)((value *0.60335196f)/2); break ; case CYDeviceTypeIphone6p: constraint = (CGFloat)(value/3); break; case CYDeviceTypeIphone7p: constraint = (CGFloat)(value/3); break; default: constraint = (CGFloat)((value *0.51396649f)/2); break; } return constraint; } /** 以 6 的px像素值作为基础来计算其他屏幕的pt值-->约束 @param valu 4000 e 6 的px像素值 @return 当前设备的pt值 */ + (CGFloat)getConstrainlWithValueFrom6:(CGFloat)value { ECGLayoutConstraint *layoutConstraint = [self shareInstance]; CGFloat constraint = 0; switch (layoutConstraint.deviceType) { case CYDeviceTypeIphone6: constraint = (CGFloat)(value/2); break ; case CYDeviceTypeIphone6s: constraint = (CGFloat)(value/2); break ; case CYDeviceTypeIphone7: constraint = (CGFloat)(value/2); break ; case CYDeviceTypeIphone6p: constraint = (CGFloat)((value *1.656f)/3); break; case CYDeviceTypeIphone7p: constraint = (CGFloat)((value *1.656f)/3); break; default: constraint = (CGFloat)((value *0.85333333f)/2); break; } return constraint; } /** 以 6 为基准得到一个不同屏幕尺寸相对应的 font @param fontSize <#fontSize description#> @return 当前设备相对应的 font */ + (UIFont * _Nullable)getAdjustsFont:(CGFloat)fontSize { return [UIFont systemFontOfSize:[self getAdjustFontSize:fontSize]]; } /** 以 6P 为基准得到一个不同屏幕尺寸相对应的 font @param fontSize <#fontSize description#> @return 当前设备相对应的 font */ + (UIFont * _Nullable)getAdjustsFontFrom6P:(CGFloat)fontSize { return [UIFont systemFontOfSize:[self getAdjustFontSizeFrom6P:fontSize]]; } /** 以 6 为基准得到字体的字号大小 @param fontSize <#fontSize description#> @return 当前设备字体的字号大小 */ + (CGFloat)getAdjustFontSize:(CGFloat)fontSize { ECGLayoutConstraint *layoutConstraint = [self shareInstance]; CGFloat size = 0.0f; switch (layoutConstraint.deviceType) { case CYDeviceTypeIphone6: size = fontSize; break ; case CYDeviceTypeIphone6p: size = (fontSize *1.104); break ; case CYDeviceTypeIphone7p: size = (fontSize *1.104); break ; default: size = (fontSize *0.85333333); break ; } return size; } /** 以 6P 为基准得到字体的字号大小 @param fontSize <#fontSize description#> @return 当前设备字体的字号大小 */ + (CGFloat)getAdjustFontSizeFrom6P:(CGFloat)fontSize { ECGLayoutConstraint *layoutConstraint = [self shareInstance]; CGFloat size = 0.0f; switch (layoutConstraint.deviceType) { case CYDeviceTypeIphone6: size = (fontSize *0.9); break ; case CYDeviceTypeIphone6p: size = fontSize; break ; case CYDeviceTypeIphone7p: size = fontSize; break ; default: size = (fontSize *0.7); break ; } return size; } /** * 当前设备型号 */ - (CYDeviceType)currentDeviceType { CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height; if (screenHeight == 480.0f) { return CYDeviceTypeIphone4s; }else if (screenHeight == 568.0f){ return CYDeviceTypeIphone5; }else if (screenHeight == 568.0f){ return CYDeviceTypeIphone5s; }else if (screenHeight == 667.0f) { return CYDeviceTypeIphone6; }else if (screenHeight == 667.0f) { return CYDeviceTypeIphone6s; }else if (screenHeight == 667.0f) { return CYDeviceTypeIphone7; } return CYDeviceTypeIphone6p; } @end
相关文章推荐
- 字体大小sp的适配、不同屏幕密度下dp的适配、布局的适配以及横线的设置
- 屏幕适配--自动生成各种屏幕大小的尺寸文件的jar包
- 根据屏幕宽度自动适配字体大小,一次使用终身难忘!
- android 用java写一个自动适配各种屏幕大小的工具
- QF——对不同尺寸屏幕的适配(自动布局:AutoLayout)
- [置顶] iOS适配不同屏幕下的字体大小
- Symbian中设置屏幕字体大小以及样式
- TabLayout让文字平铺以及改变字体大小
- css webapp手机屏幕适配字体大小
- java对象的内存布局(一):计算java对象占用的内存空间以及java object layout
- 使用 rem 实现 适配各种屏幕布局
- Extjs中layout:column的布局,容器大小使用百分比,不能自适应(自动缩放)
- android 屏幕适配之自适应字体大小的TextView
- Android中设置半个屏幕大小且居中的按钮布局 (layout_weight属性)
- 使用rem实现全屏幕自动适配(等比例缩放布局样式)
- android gridView屏幕适配,以及GridView的各种属性
- AutoLayout——Android屏幕自动适配
- Android自适应屏幕大小和layout布局
- 根据屏幕宽高比适配文字大小 和 布局
- iOS AutoLayout自动布局中级开发教程(6)-淘宝客户端iPhone 6/6 Plus 设计·适配方案