Xcode iPad 4的宽度/高度混淆了吗?

Xcode iPad 4的宽度/高度混淆了吗?,xcode,ipad,height,width,Xcode,Ipad,Height,Width,我一直在致力于将iPhone应用程序改编成iPad。由于许多资产必须按不同的比例进行缩放和放置,因此在重新安置所有资产方面还有一些工作要做 我注意到,在iPad mini上,如果我们使用以下代码: CGFloat height = [UIScreen mainScreen].currentMode.size.height; CGFloat width = [UIScreen mainScreen].currentMode.size.width; 返回的高度是1024。这是iPad的长边。 然而

我一直在致力于将iPhone应用程序改编成iPad。由于许多资产必须按不同的比例进行缩放和放置,因此在重新安置所有资产方面还有一些工作要做

我注意到,在iPad mini上,如果我们使用以下代码:

CGFloat height = [UIScreen mainScreen].currentMode.size.height;
CGFloat width = [UIScreen mainScreen].currentMode.size.width;
返回的高度是1024。这是iPad的长边。
然而,如果我使用iPad4并询问高度,我会得到1536,这是iPad4较短的边缘。我试着在iPad发布的时候把它翻转过来,但似乎没有什么能达到我想要的效果(iPad4的高度=2048)。还有其他人有这个问题吗?这似乎是苹果方面的一个bug……除非我做错了什么。

这听起来确实像个bug,但你可以通过使用
bounds
而不是
currentMode
绕过它。后一个属性是对物理屏幕的测量,以像素为单位,显然可以具有任意方向,而前一个属性是逻辑屏幕区域,以点为单位(您更可能在其中布置UI),而且所有现有iPad的大小都应该一致。

这听起来确实像个bug,但您可以通过使用
边界
而不是
当前模式
来绕过它。后一个属性是对物理屏幕的测量,以像素为单位,显然可以具有任意方向,而前一个属性是逻辑屏幕区域,以点为单位(您更可能在其中布置UI),并且在所有现有iPad上的大小应一致。

尝试使用'[[UIScreen mainScreen]applicationFrame]“
applicationFrame
根据应用程序是否有状态栏以及(如果我没记错的话)状态栏是否处于双高模式(捆绑、录制音频等)而有所不同。
bounds
可能是更安全的选择。尝试使用“[[UIScreen mainScreen]applicationFrame]“
applicationFrame
根据应用程序是否有状态栏以及(如果我没记错的话)状态栏是否处于双高模式(栓系、录制音频等)而有所不同.
bounds
可能是更安全的选择。我同意。避免currentMode,你不应该真的需要它。始终在分辨率无关的点上工作,并通过@2x利用视网膜图形。这迫使我通过@2x使用视网膜图形,而不是检测任何@2x资产。我想这是合适的,但在我的情况下,我真的想要为了避免某些文件不重复,因为我有PNG(具有透明度属性)这是相当大的。我希望我能检测到2048 vs 1024并缩小图像…该死。但是边界确实起作用。如果使用UIImage的
+imageName:
,则不需要复制文件-如果它找不到文件的视网膜版本,它会为您缩小非视网膜版本。但不会t将视网膜图像缩小到非视网膜图像。我不同意质量下降。这个答案对我来说很有效,尽管它不是理想的解决方案。我愿意牺牲代码清晰度,以减少文件数量(我认为,在大多数情况下,这将是一个错误)但对于这种特殊情况,我觉得它可能很有价值。不管怎样,我最终还是使用了边界。谢谢@noahwitherspoon我同意。避免使用currentMode,你不应该真的需要它。始终在分辨率无关的点上工作,并通过@2x利用视网膜图形。这迫使我通过@2x使用视网膜图形,而不是检测到一个错误y@2x资产。我想这是合适的,但在我的情况下,我真的想避免某些文件是非视网膜重复的,因为我有PNG(具有透明度属性)这是相当大的。我希望我能检测到2048 vs 1024并缩小图像…该死。但是边界确实起作用。如果使用UIImage的
+imageName:
,则不需要复制文件-如果它找不到文件的视网膜版本,它会为您缩小非视网膜版本。但不会t将视网膜图像缩小到非视网膜图像。我不同意质量下降。这个答案对我来说很有效,尽管它不是理想的解决方案。我愿意牺牲代码清晰度,以减少文件数量(我认为,在大多数情况下,这将是一个错误)但对于这种特殊情况,我觉得它可能很有价值。不管怎样,我最终还是使用了边界。谢谢@NoahWitherspoon