ECGLayoutConstraint---多屏幕适配,自动计算各种屏幕下的布局以及字体大小

在实际开发中,由于要实现多屏幕适配,而我们的常见的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

#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 value 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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值