我有一个我为3.5英寸和4英寸设计的应用程序。我使用以下方法调整了屏幕上的项目:
CGRect screenBounds = [[UIScreen mainScreen] bounds];
if (screenBounds.size.height == 568) {
//4 inch code
} else {
//3.5 inch code
}
然后发布iPhone 6和6 plus,所以我不得不调整他们的屏幕尺寸。幸运的是iPhone 6具有相同的比例,因此使用相同的方法。但是当涉及iPhone 6+时,它不再起作用,因为它是3倍规模。
现在这就是为什么我改变了之前使用过的方法:
CGRect screenBounds = [[UIScreen mainScreen] bounds];
if ([UIScreen mainScreen].nativeScale > 2.1) {
//6 plus
} else if (screenBounds.size.height == 568) {
//4 inch / iPhone 6 code
} else {
//3.5 inch code
}
现在,它完全适用于iPhone 4S等所有设备。它崩溃了。日志说:
2014-10-17 21:06:31.370 Lichtpunkt[1288:60b] -[UIScreen nativeScale]: unrecognized selector sent to instance 0x17539920
2014-10-17 21:06:31.372 Lichtpunkt[1288:60b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIScreen nativeScale]: unrecognized selector sent to instance 0x17539920'
*** First throw call stack:
(0x30b94fd3 0x3b40dccf 0x30b98967 0x30b97253 0x30ae67b8 0x4102b 0x3342fda5 0x3305d2c1 0x33046e3f 0x33121d6d 0x330466f3 0x3304639b 0x3302a03d 0x33029cd5 0x330296df 0x330294ef 0x3302321d 0x30b602a5 0x30b5dc49 0x30b5df8b 0x30ac8f0f 0x30ac8cf3 0x35a21663 0x3341416d 0x18d6b91 0x2c9d1 0x3b91aab7)
libc++abi.dylib: terminating with uncaught exception of type NSException
问题是我无法将更改恢复到第一个解决方案,因为iPhone 6+没有完全调整,我试过了。
有人可以帮我吗?
答案 0 :(得分:0)
[UIScreen nativeScale]
仅适用于iOS 8。
这就是为什么它在iOS 7&amp ;;上崩溃的原因旧设备。
您需要提供适用于 两者 iOS 8和您希望支持的旧iOS版本的替代方案。 UIScreen中还有一些其他屏幕尺寸提取方法可以一直回到iOS 2,但是你需要考虑到当设备在人像和视频之间移动时高度和宽度的交换。景观模式。