X系列已经出来一个多月了,相信大家都在考虑做X系列的适配了。
X系列相对于以前的版本的iPhone主要是多了个刘海,顶部导航栏部分高度由原来的64(状态栏20+44)变为88(状态栏44+44)。想对X系列做适配,最主要是判断iPhone是否属于X系列的,那怎么去判断呢?
X系列底部有34的安全距离,用来满足X的手势操作,而非X系列的没有这个安全距离,那么可以根据是否有安全距离来判断是否为X系列。下面奉献上判断的代码(代码是写在pch文件中)
#define APP ((AppDelegate *)[[UIApplication sharedApplication] delegate])
/**
* 判断机型
*/
#define IPHONE_X isIphoneX()
//内联函数
static inline BOOL isIphoneX(){
BOOL iphoneX = NO;
// 先判断设备是否是iphone/ipod
if (UIDevice.currentDevice.userInterfaceIdiom != UIUserInterfaceIdiomPhone) {
return iphoneX;
}
if (@available(iOS 11.0, *)) {
// 利用safeAreaInsets.bottom > 0.0来判断是否是X系列
if (APP.window.safeAreaInsets.bottom > 0.0) {
iphoneX = YES;
}
}
return iphoneX;
}
X系列判断出来了,那么就可以根据自己的具体需求去做适配了。但是大家肯定是希望各个控件能根据屏幕大小而去改变大小,怎么办呢?UI肯定会给你一个屏幕的大小的设计图让你去根据设计图去画界面,但是其他的屏幕大小怎么办呢,不可能每个屏幕大小都做一套适配吧,这不现实,耗时耗力,代码臃肿还不利于维护。我们可以根据UI给的设计图去设计屏幕比例,然后根据这个比例来缩放。例如UI给的是iPhone 6大小的设计图:
/*屏幕宽高*/
#define SCREEN_HEIGHT ([UIScreen mainScreen].bounds.size.height)
#define SCREEN_WIDTH ([UIScreen mainScreen].bounds.size.width)
#define kScaleH (SCREEN_HEIGHT/667.0)
#define kScaleW (SCREEN_WIDTH/375.0)
667和375就是iPhone 6的高和宽。
控件的大小就可以根据kScaleH,kScaleW比例来缩放了。
控件大小缩放了,当然也希望字体大小也能相应的改变大小。根据小编的测试屏幕宽为375的用原大小,不是375的就加大一号,因为现在做适配都是从iPhone 6开始了,375是iPhone 6的宽度,是所有适配iPhone最小的宽度了,所以以375来做基准。
/*自定义字体大小*/
#define kCustomFont(size) [UIFont systemFontOfSize:FontSize(size)]
//内联函数
static inline CGFloat FontSize(CGFloat fontSize){
if (SCREEN_WIDTH == 375) {
return fontSize;
}else{
return fontSize+1;
}
}
以后设置字体大小时直接调用kCustomFont方法就好。例如
UILabel * label = [[UILabel alloc] init];
label.textColor = [UIColor whiteColor];
label.textAlignment = NSTextAlignmentCenter;
label.font = kCustomFont(26);
[self.view addSubview:label];
小编适配X系列就这些了!
网友评论