【问题标题】:iPad 4 Width/Height confused?iPad 4 宽度/高度混淆?
【发布时间】:2012-11-15 15:22:46
【问题描述】:

我一直致力于让 iPhone 应用适应 iPad。由于必须以不同方式缩放和放置许多资产,因此在重新定位所有内容方面还有一些工作要做。

我注意到的一件事是,在 iPad mini 上,如果我们使用以下代码:

CGFloat height = [UIScreen mainScreen].currentMode.size.height;
CGFloat width = [UIScreen mainScreen].currentMode.size.width;

返回的高度是 1024。这是 iPad 的长边。 但是,如果我使用 iPad 4 并询问高度,我会得到 1536 - 这是 iPad 4 的较短边缘。我尝试在启动时翻转 iPad 等等,但似乎没有任何结果想要(iPad 4 的高度 = 2048)。还有其他人有这个问题吗?这似乎是苹果方面的一个错误......除非我做错了什么。

【问题讨论】:

  • 尝试使用'[[UIScreen mainScreen] applicationFrame]'
  • applicationFrame 取决于应用程序是否有状态栏以及(如果我没记错的话)状态栏是否处于双高模式(网络共享、录制音频等)。 bounds 可能是更安全的选择。

标签: xcode ipad height width


【解决方案1】:

这听起来确实像一个错误,但您可以通过使用bounds 而不是currentMode 来解决它。后一个属性是物理屏幕的测量值,以像素为单位——显然可以有任意方向——而前者是逻辑屏幕区域,以点为单位(你更有可能在其中布置 UI) ,并且应该在所有现有 iPad 上保持一致。

【讨论】:

  • 我同意。避免 currentMode,你不应该真的需要它。始终在与分辨率无关的点上工作,并通过 @2x 使用视网膜图形。
  • 这迫使我通过@2x 使用视网膜图形,而不是检测任何@2x 资产。我想这是合适的,但在我的情况下,我真的想避免某些文件是非视网膜重复文件,因为我有相当大的 PNG(具有透明度属性)。希望我能检测到 2048 与 1024 并将图像缩小....该死。但界限确实有效。
  • 如果你使用 UIImage 的+imageNamed:,你不需要复制文件——如果它找不到文件的 Retina 版本,它会回退到放大非- 适合您的 Retina 版本。
  • 但它不会将视网膜图像缩小到非视网膜。我不能接受失去质量。
  • 这个答案对我有用,虽然它不是理想的解决方案。我愿意牺牲代码清晰度来支持更少的文件(在大多数情况下,我认为这将是一个错误),但对于这种特定情况,我觉得它可能很有价值。无论如何,我最终使用了边界。谢谢@NoahWitherspoon
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多