iOS [UIScreen mainScreen].bounds 横竖屏在不同版本获取屏幕大小不对的问题
2017-03-14 16:06
513 查看
最近在做 随遇(我们公司的陌生人社交应用) 的时候,做了一个滑动旋转的引导图,类似当当和百度音乐,在对iphone 6 plus做适配的时候发现了一个奇葩的问题:在公司某个同事的机器上,引导图显示是正常的,在其他人的6P上,显示不正常,让我觉得很疑惑,于是乎debug一番,发现如下规律:
1,在引导图能正常显示的机器上,通过[UIScreen mainScreen].bounds 获得的高度是 667!!!
2,在引导图不能正常显示的机器上,通过[UIScreen mainScreen].bounds获得的高度是736。
很明显,1是不对的,667是6的高度!搞得我非常之不爽,一时也没弄明白其中的缘由,给测试妹子也给不了解释。
第二天我仔细对比这两台手机,发现其中一台竟然用的是 放大模式 !而6P在放大模式下,通过[UIScreen mainScreen].bounds 获得的高度竟然是667,我也是醉了。果断调回标准模式做适配,瞬间搞定。
另外,我又试了一下iPhone6在放大模式下,其高度是:568!!!iPhone5s及之前的iPhone没有放大模式。
同样遇到,这时候我给出的解决方法是判断设备版本,来让高、宽是否相等或相互替换。
作者 天明依旧 关注
2016.01.26 10:07* 字数 560 阅读 11123评论
33喜欢 19
新添加判断iPhone 7、iPhone 7 Plus ,我手里没有7,判断不对表打我~
资料:http://www.iphonehacks.com/download-iphone-ios-firmware
1.手机系统版本:9.1
NSString* phoneVersion = [[UIDevice currentDevice] systemVersion];
2.手机类型:iPhone 6
NSString* phoneModel = [self iphoneType];//方法在下面
3.手机系统:iPhone OS
NSString * iponeM = [[UIDevice currentDevice] systemName];
4.电池电量
CGFloat batteryLevel=[[UIDevicecurrentDevice]batteryLevel];
- (NSString *)iphoneType {
需要导入头文件:#import <sys/utsname.h>
struct utsname systemInfo;
uname(&systemInfo);
NSString *platform = [NSString stringWithCString:systemInfo.machine encoding:NSASCIIStringEncoding];
if ([platform isEqualToString:@"iPhone1,1"]) return @"iPhone 2G";
if ([platform isEqualToString:@"iPhone1,2"]) return @"iPhone 3G";
if ([platform isEqualToString:@"iPhone2,1"]) return @"iPhone 3GS";
if ([platform isEqualToString:@"iPhone3,1"]) return @"iPhone 4";
if ([platform isEqualToString:@"iPhone3,2"]) return @"iPhone 4";
if ([platform isEqualToString:@"iPhone3,3"]) return @"iPhone 4";
if ([platform isEqualToString:@"iPhone4,1"]) return @"iPhone 4S";
if ([platform isEqualToString:@"iPhone5,1"]) return @"iPhone 5";
if ([platform isEqualToString:@"iPhone5,2"]) return @"iPhone 5";
if ([platform isEqualToString:@"iPhone5,3"]) return @"iPhone 5c";
if ([platform isEqualToString:@"iPhone5,4"]) return @"iPhone 5c";
if ([platform isEqualToString:@"iPhone6,1"]) return @"iPhone 5s";
if ([platform isEqualToString:@"iPhone6,2"]) return @"iPhone 5s";
if ([platform isEqualToString:@"iPhone7,1"]) return @"iPhone 6 Plus";
if ([platform isEqualToString:@"iPhone7,2"]) return @"iPhone 6";
if ([platform isEqualToString:@"iPhone8,1"]) return @"iPhone 6s";
if ([platform isEqualToString:@"iPhone8,2"]) return @"iPhone 6s Plus";
if ([platform isEqualToString:@"iPhone8,4"]) return @"iPhone SE";
if ([platform isEqualToString:@"iPhone9,1"]) return @"iPhone 7";
if ([platform isEqualToString:@"iPhone9,2"]) return @"iPhone 7 Plus";
if ([platform isEqualToString:@"iPod1,1"]) return @"iPod Touch 1G";
if ([platform isEqualToString:@"iPod2,1"]) return @"iPod Touch 2G";
if ([platform isEqualToString:@"iPod3,1"]) return @"iPod Touch 3G";
if ([platform isEqualToString:@"iPod4,1"]) return @"iPod Touch 4G";
if ([platform isEqualToString:@"iPod5,1"]) return @"iPod Touch 5G";
if ([platform isEqualToString:@"iPad1,1"]) return @"iPad 1G";
if ([platform isEqualToString:@"iPad2,1"]) return @"iPad 2";
if ([platform isEqualToString:@"iPad2,2"]) return @"iPad 2";
if ([platform isEqualToString:@"iPad2,3"]) return @"iPad 2";
if ([platform isEqualToString:@"iPad2,4"]) return @"iPad 2";
if ([platform isEqualToString:@"iPad2,5"]) return @"iPad Mini 1G";
if ([platform isEqualToString:@"iPad2,6"]) return @"iPad Mini 1G";
if ([platform isEqualToString:@"iPad2,7"]) return @"iPad Mini 1G";
if ([platform isEqualToString:@"iPad3,1"]) return @"iPad 3";
if ([platform isEqualToString:@"iPad3,2"]) return @"iPad 3";
if ([platform isEqualToString:@"iPad3,3"]) return @"iPad 3";
if ([platform isEqualToString:@"iPad3,4"]) return @"iPad 4";
if ([platform isEqualToString:@"iPad3,5"]) return @"iPad 4";
if ([platform isEqualToString:@"iPad3,6"]) return @"iPad 4";
if ([platform isEqualToString:@"iPad4,1"]) return @"iPad Air";
if ([platform isEqualToString:@"iPad4,2"]) return @"iPad Air";
if ([platform isEqualToString:@"iPad4,3"]) return @"iPad Air";
if ([platform isEqualToString:@"iPad4,4"]) return @"iPad Mini 2G";
if ([platform isEqualToString:@"iPad4,5"]) return @"iPad Mini 2G";
if ([platform isEqualToString:@"iPad4,6"]) return @"iPad Mini 2G";
if ([platform isEqualToString:@"i386"]) return @"iPhone Simulator";
if ([platform isEqualToString:@"x86_64"]) return @"iPhone Simulator";
return platform;
}
1,在引导图能正常显示的机器上,通过[UIScreen mainScreen].bounds 获得的高度是 667!!!
2,在引导图不能正常显示的机器上,通过[UIScreen mainScreen].bounds获得的高度是736。
很明显,1是不对的,667是6的高度!搞得我非常之不爽,一时也没弄明白其中的缘由,给测试妹子也给不了解释。
第二天我仔细对比这两台手机,发现其中一台竟然用的是 放大模式 !而6P在放大模式下,通过[UIScreen mainScreen].bounds 获得的高度竟然是667,我也是醉了。果断调回标准模式做适配,瞬间搞定。
另外,我又试了一下iPhone6在放大模式下,其高度是:568!!!iPhone5s及之前的iPhone没有放大模式。
同样遇到,这时候我给出的解决方法是判断设备版本,来让高、宽是否相等或相互替换。
iOS 获取手机型号,系统版本
作者 天明依旧 关注
2016.01.26 10:07* 字数 560 阅读 11123评论
33喜欢 19
新添加判断iPhone 7、iPhone 7 Plus ,我手里没有7,判断不对表打我~
资料:http://www.iphonehacks.com/download-iphone-ios-firmware
1.手机系统版本:9.1
NSString* phoneVersion = [[UIDevice currentDevice] systemVersion];
2.手机类型:iPhone 6
NSString* phoneModel = [self iphoneType];//方法在下面
3.手机系统:iPhone OS
NSString * iponeM = [[UIDevice currentDevice] systemName];
4.电池电量
CGFloat batteryLevel=[[UIDevicecurrentDevice]batteryLevel];
- (NSString *)iphoneType {
需要导入头文件:#import <sys/utsname.h>
struct utsname systemInfo;
uname(&systemInfo);
NSString *platform = [NSString stringWithCString:systemInfo.machine encoding:NSASCIIStringEncoding];
if ([platform isEqualToString:@"iPhone1,1"]) return @"iPhone 2G";
if ([platform isEqualToString:@"iPhone1,2"]) return @"iPhone 3G";
if ([platform isEqualToString:@"iPhone2,1"]) return @"iPhone 3GS";
if ([platform isEqualToString:@"iPhone3,1"]) return @"iPhone 4";
if ([platform isEqualToString:@"iPhone3,2"]) return @"iPhone 4";
if ([platform isEqualToString:@"iPhone3,3"]) return @"iPhone 4";
if ([platform isEqualToString:@"iPhone4,1"]) return @"iPhone 4S";
if ([platform isEqualToString:@"iPhone5,1"]) return @"iPhone 5";
if ([platform isEqualToString:@"iPhone5,2"]) return @"iPhone 5";
if ([platform isEqualToString:@"iPhone5,3"]) return @"iPhone 5c";
if ([platform isEqualToString:@"iPhone5,4"]) return @"iPhone 5c";
if ([platform isEqualToString:@"iPhone6,1"]) return @"iPhone 5s";
if ([platform isEqualToString:@"iPhone6,2"]) return @"iPhone 5s";
if ([platform isEqualToString:@"iPhone7,1"]) return @"iPhone 6 Plus";
if ([platform isEqualToString:@"iPhone7,2"]) return @"iPhone 6";
if ([platform isEqualToString:@"iPhone8,1"]) return @"iPhone 6s";
if ([platform isEqualToString:@"iPhone8,2"]) return @"iPhone 6s Plus";
if ([platform isEqualToString:@"iPhone8,4"]) return @"iPhone SE";
if ([platform isEqualToString:@"iPhone9,1"]) return @"iPhone 7";
if ([platform isEqualToString:@"iPhone9,2"]) return @"iPhone 7 Plus";
if ([platform isEqualToString:@"iPod1,1"]) return @"iPod Touch 1G";
if ([platform isEqualToString:@"iPod2,1"]) return @"iPod Touch 2G";
if ([platform isEqualToString:@"iPod3,1"]) return @"iPod Touch 3G";
if ([platform isEqualToString:@"iPod4,1"]) return @"iPod Touch 4G";
if ([platform isEqualToString:@"iPod5,1"]) return @"iPod Touch 5G";
if ([platform isEqualToString:@"iPad1,1"]) return @"iPad 1G";
if ([platform isEqualToString:@"iPad2,1"]) return @"iPad 2";
if ([platform isEqualToString:@"iPad2,2"]) return @"iPad 2";
if ([platform isEqualToString:@"iPad2,3"]) return @"iPad 2";
if ([platform isEqualToString:@"iPad2,4"]) return @"iPad 2";
if ([platform isEqualToString:@"iPad2,5"]) return @"iPad Mini 1G";
if ([platform isEqualToString:@"iPad2,6"]) return @"iPad Mini 1G";
if ([platform isEqualToString:@"iPad2,7"]) return @"iPad Mini 1G";
if ([platform isEqualToString:@"iPad3,1"]) return @"iPad 3";
if ([platform isEqualToString:@"iPad3,2"]) return @"iPad 3";
if ([platform isEqualToString:@"iPad3,3"]) return @"iPad 3";
if ([platform isEqualToString:@"iPad3,4"]) return @"iPad 4";
if ([platform isEqualToString:@"iPad3,5"]) return @"iPad 4";
if ([platform isEqualToString:@"iPad3,6"]) return @"iPad 4";
if ([platform isEqualToString:@"iPad4,1"]) return @"iPad Air";
if ([platform isEqualToString:@"iPad4,2"]) return @"iPad Air";
if ([platform isEqualToString:@"iPad4,3"]) return @"iPad Air";
if ([platform isEqualToString:@"iPad4,4"]) return @"iPad Mini 2G";
if ([platform isEqualToString:@"iPad4,5"]) return @"iPad Mini 2G";
if ([platform isEqualToString:@"iPad4,6"]) return @"iPad Mini 2G";
if ([platform isEqualToString:@"i386"]) return @"iPhone Simulator";
if ([platform isEqualToString:@"x86_64"]) return @"iPhone Simulator";
return platform;
}
相关文章推荐
- iOS [UIScreen mainScreen].bounds 获取屏幕大小不对的问题
- iOS [UIScreen mainScreen].bounds 获取屏幕大小不对的问题
- iOS [UIScreen mainScreen].bounds 获取屏幕大小不对的问题
- 问题:获取屏幕尺寸不正确(UIScreen mainScreen bounds)
- ios [UIScreen mainScreen] bounds] 获取尺寸不对
- [UIScreen mainScreen].bounds.size 在iPhone 6和iPhone 6 plus上获取到的尺寸不对
- [UIScreen mainScreen].bounds.size 在iPhone 6和iPhone 6 plus上获取到的尺寸不对
- [UIScreen mainScreen].bounds.size获取设备长宽时的问题
- [UIScreen mainScreen].bounds.size.height获取的数值不变的问题解决
- IOS学习笔记2-IOS屏幕 [[UIScreen mainScreen] bounds] 与[UIScreen mainScreen] applicationFrame]区别
- [UIScreen MainScreen].bounds.size获取屏幕尺寸不准确
- 获取不同尺寸3.5/4.0的屏幕大小和系统ios 6/7的版本
- 获得当前屏幕宽和高 [UIScreen mainScreen].bounds.size
- Android 获取屏幕尺寸与密度 遇到一个问题,我的地图浮标图片在WVGA手机上正好,在QVGA上就显的太大,所以我要根据屏幕的不同调整浮标的大小使其在QVGA大小合适。有的同事提出了依据
- IOS 下获取 rootviewcontroller 的版本不同的问题解决办法
- 在ios 下获取 rootviewcontroller 的版本不同的问题
- iOS不同版本适配问题(#ifdef __IPHONE_7_0)
- 获取IOS屏幕尺寸大小
- [[UIScreen mainScreen] bounds] 和[UIScreen mainScreen] applicationFrame]
- Why my UIScreen mainScreen bounds size return 480