ios 屏幕适配篇O~2

关于iOS屏幕适配一些小技巧

2018-06-21  本文已影响33人  Tomous
最近开始的一个项目,一个UI上面的小控件特别多,而且还是一行显示的,我是在8上面写的,到8P上面,就显得控件之间的空隙特别大,又或者到5S上,控件显示不完全了,,用Masonry的话,有时候也会把控件挤得变形了,看看UI图,你就知道多LD了。 1.png 2.png

适配完之后,我在各种机型上都看了看,感觉效果还不错。我是通过不同机型去设置控件大小和字体大小来适配的,后期如果看到更好的,会陆续更新。当然,如果您有更好的意见,欢迎在下面留言,,大家共同积累,共同进步😆。

1、首先是在pch里面设置各种申明

//宽高
#define ScreenWidth [UIScreen mainScreen].bounds.size.width
#define ScreenHeight [UIScreen mainScreen].bounds.size.height
//宽高比例,现在8上面计算好合适的宽高,然后乘以相应的比例就OK了
#define WIDTHSCALE6 ScreenWidth/375.0f
#define HEIGHTSCALE6 ScreenHeight/667.0f
//是否是IPhone
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define SCREEN_MAX_LENGTH (MAX(ScreenWidth, ScreenHeight))
#define SCREEN_MIN_LENGTH (MIN(ScreenWidth, ScreenHeight))
//根据屏幕宽高判断机型
#define IS_IPHONE_4_OR_LESS (IS_IPHONE && SCREEN_MAX_LENGTH < 568.0)
#define IS_IPHONE_5_5S (IS_IPHONE && SCREEN_MAX_LENGTH == 568.0)
#define IS_IPHONE_6_7_8 (IS_IPHONE && SCREEN_MAX_LENGTH == 667.0)
#define IS_IPHONE_6P_7P_8P (IS_IPHONE && SCREEN_MAX_LENGTH == 736.0)
#define ISiPhoneX ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) : NO)
//导航条,电池条,tabBar的高度
#define navHeight (44)
#define statusHeight (ISiPhoneX?44:20)
#define tabbarHeight (ISiPhoneX?83:49)

2、字体大小的设置,我是在8上面设置字体大小13的

#define p [UIScreen mainScreen].bounds.size.width / 375.0
+ (void)load {
    // 获取替换后的类方法
    Method newMethod = class_getClassMethod([self class], @selector(adjustFont:));
    // 获取替换前的类方法
    Method method = class_getClassMethod([self class], @selector(systemFontOfSize:));
    // 然后交换类方法,交换两个方法的IMP指针,(IMP代表了方法的具体的实现)
    method_exchangeImplementations(newMethod, method);
}

//注意:在调用此方法时, 方法的指针已经交换:
+ (UIFont *)adjustFont:(CGFloat)fontSize {
    if (p < 1) {//5s
        fontSize = fontSize - 2;
    }
    else if (p==1) {//8
        //fontSize = fontSize
    } else if (p>1) {//8p
        fontSize = fontSize + 0;
    }
    UIFont *newFont = nil;
    newFont = [UIFont adjustFont:fontSize];
    return newFont;
}

这样他就能根据不同机型设置对应的你想要的字体大小了

上一篇 下一篇

猜你喜欢

热点阅读