今天查看公司项目,发现在新机型上UI有问题,追根溯源是宏定义iPhoneX判断问题。
特地查看自已以往开发关于iPhoneX的判断,发现[[UIScreen mainScreen] bounds]和[[UIScreen mainScreen] currentMode]的区别。
所以打印查看,在此做一下记录。
以下均已截图展示,代码最后贴出。
本人常用的几处宏定义,如图;(去年出新机做的宏定义,bounds获取宽高)
打印结果,一看便知:(currentModeSize和boundsSize在此没有打印,有兴趣的可以自行尝试)
综上,如果你用的是bounds方法,那恭喜你不用在做适配,
currentMode方法,那就,,,
两者区别,本人没有查找相关文件术语,仅从打印结果看,currentMode主要是分辨率,所以几种机型不太一致。
(自行查看相关说明吧。。。。。)
转载请注明出处。谢谢!
附代码:
宏定义:
#define SCREEN_HEIGHT [[UIScreen mainScreen] bounds].size.height
#define SCREEN_WIDTH [[UIScreen mainScreen] bounds].size.width
#define IPHONE_X ([UIScreen instancesRespondToSelector:@selector(bounds)] ? CGSizeEqualToSize(CGSizeMake(375, 812), [[UIScreen mainScreen] bounds].size) : NO)
#define StatusbarHeight [[UIApplication sharedApplication] statusBarFrame].size.height
#define StatusNavigationbarHeight ([[UIApplication sharedApplication] statusBarFrame].size.height + 44)
#define TabbarHeight (([UIScreen instancesRespondToSelector:@selector(bounds)] ? CGSizeEqualToSize(CGSizeMake(375, 812), [[UIScreen mainScreen] bounds].size) : NO)? 49+34 : 49)
打印:
if (IPHONE_X) {
DLog(@"IPHONE_X");
}else{
DLog(@"其他");
}
DLog(@"状态栏H:%f",StatusbarHeight);
DLog(@"导航栏H:%f",StatusNavigationbarHeight);
DLog(@"底部栏H:%d",TabbarHeight);
DLog(@"W:%f,H:%f",SCREEN_WIDTH,SCREEN_HEIGHT);
DLog(@"宽高比:%f",SCREEN_WIDTH/SCREEN_HEIGHT);
下面是为了比较currentMode和bounds却别,
CGSize currentModeSize = [[UIScreen mainScreen] currentMode].size;
DLog(@"currentMode:W:%f,H:%f",currentModeSize.width,currentModeSize.height);
CGSize boundsSize = [[UIScreen mainScreen] bounds].size;
DLog(@"bounds:W:%f,H:%f",boundsSize.width,boundsSize.height);