iOS [UIScreen mainScreen].bounds 横竖屏在不同版本获取屏幕大小不对的问题

在开发滑动旋转引导图时,发现在不同iPhone 6 Plus设备上,通过[UIScreen mainScreen].bounds获取的高度不一致。问题源于放大模式下,6P获取的高度为667,而非正常值736。解决方案是检测设备是否处于放大模式,并根据设备型号和系统版本进行适配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在做 随遇(我们公司的陌生人社交应用) 的时候,做了一个滑动旋转的引导图,类似当当和百度音乐,在对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没有放大模式。


同样遇到,这时候我给出的解决方法是判断设备版本,来让高、宽是否相等或相互替换。

iOS 获取手机型号,系统版本

144 
作者  天明依旧 
2016.01.26 10:07*  字数 560  阅读 11123 评论 33

新添加判断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;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值