iPhone 6 Plus分辨率混乱:Xcode还是Apple网站?为了发展


265

苹果网站声称分辨率为1080p:1920 x 1080

但是,Xcode(今天启动8.0 GM)所需的启动屏幕为2208 x 1242。

谁是对的?

Xcode


iPhone 6+的启动图像必须为1242x2208和2208x1242。至少这可以使应用程序在模拟器中正常运行(这已在HIG中记录)。我还没有弄清楚为什么这与所谓的1920x1080物理屏幕尺寸不同。
rmaddy14 2014年

2
非常奇怪的差异。
JasonGenX 2014年


这可能会在Xcode 6.1的稳定版本中更改。是吗?
Jayprakash Dubey 2014年

3
要更新Andreas的链接,请参阅“ iPhone分辨率的最终指南” paintcodeapp.com/news/ultimate-guide-to-iphone-resolutions
David James

Answers:


308

iPhone 6+在内部使用@ 3x资源以虚拟分辨率2208×1242(具有736x414点)进行渲染,然后对其进行采样以进行显示。与在Retina MacBook上使用缩放分辨率相同—它使它们能够以像素资产的整数倍达到目标,同时在屏幕上仍具有例如12 pt的文本看起来相同的大小。

因此,是的,启动屏幕需要具有该大小。

数学:

6、5、5、5、4和4均为每英寸326像素,并使用@ 2x资产坚持所有先前设备的每英寸约160点。

6+是每英寸401像素。因此,假设它大概需要@ 2.46倍的资产。相反,Apple使用@ 3x资产并将完整的输出缩减到其自然大小的约84%。

实际上,苹果公司决定将比例提高到87%,将1080转换为1242。毫无疑问,这是为了找到尽可能接近84%的东西,仍然在两个方向上都产生积分大小-准确地为1242/1080 = 2208/1920。 ,而如果将1080变成1286,则需要以某种方式垂直渲染2282.22像素才能很好地缩放。


6
您是如何计算它的->“虚拟分辨率为2208×1242(具有736x414点)”,并且此“大致需要@ 2.46x资产”,UIScreen mainScreen] .bounds.size.height将返回6+吗?568、568 * 3(1704)或1920。–
msk

1
也许在有关启动映像的答案中添加注释?(请参阅Hannes的答案)对于要升级的现有应用程序要牢记(否则它的运行速度为320x576 @ 3x-我感到困惑了一段时间!)
Joseph Humfrey 2014年

2
[UIScreen mainScreen].bounds.size.height纵向拍摄时,@ msk 在iPhone 6+模拟器中返回736。这是2208的值除以3的比例。宽度为
414。– rmaddy

1
它的尺寸与@ 3x分辨率1242 * 2208并不完全相同,它的拉伸度为6%。
Binarian

4
太可怕了!系统范围内的性能,内存和清晰度损失会使得一些API级别的大小调整变得更加简单!嗯,我想它都将是有意义的,当他们发布的iPhone 7以及带5.5" 461 ppi的显示器。
SUP

114

答案是较旧的应用程序在2208 x 1242缩放模式下运行。但是,当为新手机构建应用程序时,可用的分辨率为:Super Retina HD 5.8(iPhone X)1125 x 2436(458ppi)Retina HD 5.5iPhone 6、7、8 Plus1242 x 2208Retina HD 4.7iPhone 6750 x 1334。这引起了问题中提到的混乱。要构建使用新手机的全屏尺寸的应用,请添加以下尺寸的LaunchImages:1125 x 2436、1242 x 2208、2208 x 1242和750 x 1334。

已针对新iPhone 11、11 Pro,11 Pro Max更新

适用于iPhone 11 Pro Max的尺寸,具有@ 3倍缩放比例,坐标空间:414 x 896点和1242 x 2688像素,458 ppi,设备物理尺寸为3.06 x 6.22英寸或77.8 x 158.0毫米。6.5英寸Super Retina XDR显示器。

大小为iPhone 11临@ 3×缩放,坐标空间:375 X 812点和1125 X 2436像素,458 PPI,设备的物理尺寸是在2.81 X 5.67或71.4 X144.0毫米。5.8英寸超级视网膜XDR显示屏。

大小为iPhone 11@ 2X缩放,坐标空间:414 X 896点和828 X 1792像素,326 PPI,设备的物理尺寸是在2.98 X 5.94或75.7 X150.9毫米。6.1英寸液态视网膜高清显示屏。

iPhoneX🅂Max的尺寸,具有@ 3x缩放比例(Apple名称:Super Retina HD 6.5显示屏“),坐标空间:414 x 896点和1242 x 2688像素,458 ppi,设备物理尺寸为3.05 x 6.20英寸或77.4 x 157.5毫米

let screen = UIScreen.main
print("Screen bounds: \(screen.bounds), Screen resolution: \(screen.nativeBounds), scale: \(screen.scale)")
//iPhone X🅂 Max Screen bounds: (0.0, 0.0, 414.0, 896.0), Screen resolution: (0.0, 0.0, 1242.0, 2688.0), scale: 3.0

大小为iPhoneX🅁@ 2X缩放(苹果名:超级视网膜HD 6.1"显示器),坐标空间:414 X 896点和828 X 1792个像素,326个PPI,设备的物理尺寸是2.98 X 5.94或75.7 X150.9毫米。

let screen = UIScreen.main
print("Screen bounds: \(screen.bounds), Screen resolution: \(screen.nativeBounds), scale: \(screen.scale)")
//iPhone X🅁 Screen bounds: (0.0, 0.0, 414.0, 896.0), Screen resolution: (0.0, 0.0, 828.0, 1792.0), scale: 2.0

尺寸为iPhoneX🅂iPhone X@ 3倍缩放(苹果名称:超级视网膜高清5.8"显示屏),坐标空间:375 X 812点和1125 X 2436个像素,458 PPI,设备的物理尺寸为2.79 X 5.65或70.9 x 143.6毫米。

let screen = UIScreen.main
print("Screen bounds: \(screen.bounds), Screen resolution: \(screen.nativeBounds), scale: \(screen.scale)")
//iPhone X🅂 and X Screen bounds: (0.0, 0.0, 375.0, 812.0), Screen resolution: (0.0, 0.0, 1125.0, 2436.0), scale: 3.0

在此处输入图片说明

大小为iPhone 6,6S,7和8@ 3×缩放(苹果名:视网膜HD 5.5),坐标空间:414 X 736点和1242×2208个像素,401个PPI,屏幕的物理尺寸是2.7×4.8或为68× 122毫米。在“缩放模式”下运行时,即没有新的LaunchImages或未在iPhone 6 Plus的“安装程序”中选择时,本机比例为2.88,屏幕为320 x 568点,即iPhone 5本机尺寸:

Screen bounds: {{0, 0}, {414, 736}}, Screen resolution: <UIScreen: 0x7f97fad330b0; bounds = {{0, 0}, {414, 736}};
mode = <UIScreenMode: 0x7f97fae1ce00; size = 1242.000000 x 2208.000000>>, scale: 3.000000, nativeScale: 3.000000

大小为iPhone 6iPhone 6S与@ 2X缩放(苹果名:视网膜HD 4.7),坐标空间:375 X 667点和750 X 1334像素,326 PPI,屏幕的物理尺寸是2.3×4.1或58×104毫米。当在“缩放模式”下运行时(即没有新的LaunchImages),屏幕为320 x 568点,这是iPhone 5的原始尺寸:

Screen bounds: {{0, 0}, {375, 667}}, Screen resolution: <UIScreen: 0x7fa01b5182d0; bounds = {{0, 0}, {375, 667}};
mode = <UIScreenMode: 0x7fa01b711760; size = 750.000000 x 1334.000000>>, scale: 2.000000, nativeScale: 2.000000

iPhone 5进行比较的是640 x 1136,iPhone 4 640 x 960。


这是我用来检查的代码(请注意,nativeScale仅在iOS 8上运行):

UIScreen *mainScreen = [UIScreen mainScreen];
NSLog(@"Screen bounds: %@, Screen resolution: %@, scale: %f, nativeScale: %f",
          NSStringFromCGRect(mainScreen.bounds), mainScreen.coordinateSpace, mainScreen.scale, mainScreen.nativeScale);

注意:上传LaunchImages,否则应用程序将在“缩放模式”下运行,并且不会显示正确的缩放比例或屏幕尺寸。在缩放模式下,nativeScalescale将不相同。在实际设备上,即使iPhone 6 Plus不在缩放模式下运行,其比例也可以为2.608,但在模拟器上运行时,其比例将显示为3.0。

比较iPhone 6和6 Plus


3
我想您没有添加新的启动映像版本。这可能就是该应用程序在“兼容模式”下运行且屏幕边界在两台设备上均为旧版320x576的原因。
Daniel Rinser 2014年

3
添加新的启动图像大小后,您将获得正确的(逻辑)屏幕绑定大小:iPhone 6为375x667,6 +为414x736。
Daniel Rinser 2014年

1
@DanielRinser谢谢你。我会尝试的。
Sverrisson

@DanielRinser感谢您对启动映像的输入。我已经根据您的输入更新了答案。
Sverrisson

iPhone 4的资产又如何呢?如果没有插槽,应该如何命名它们以及如何将它们放入资产目录?资产目录具有3个用于iPhone图像的插槽:1x,2x和3x。如果将2倍和3倍用于iPhone 6,将6倍以上的资产用于iPhone 6,我们是否将iPhone 4资产放到1倍?我不这么认为。
鸭子

96

实际/物理iPhone 6 Plus分辨率为1920x1080,但是在Xcode中,您将界面设置为2208x1242分辨率(736x414点),并且在设备上会自动缩小为1920x1080像素。

iPhone分辨率快速参考:

Device          Points    Pixels     Scale  Physical Pixels   PPI   Ratio   Size
iPhone XS Max   896x414   2688x1242  3x     2688x1242         458   19.5:9  6.5"
iPhone XR       896x414   1792x828   2x     1792x828          326   19.5:9  6.1"
iPhone X        812x375   2436x1125  3x     2436x1125         458   19.5:9  5.8"
iPhone 6 Plus   736x414   2208x1242  3x     1920x1080         401   16:9    5.5"
iPhone 6        667x375   1334x750   2x     1334x750          326   16:9    4.7"
iPhone 5        568x320   1136x640   2x     1136x640          326   16:9    4.0"
iPhone 4        480x320   960x640    2x     960x640           326   3:2     3.5"
iPhone 3GS      480x320   480x320    1x     480x320           163   3:2     3.5"

iPhone分辨率


3
漂亮而简单的回复。谢谢Leszek。
SJ Lim 2014年

46

您可能应该停止在iOS 8中使用启动图像,并使用情节提要或nib / xib。

  • Xcode中6,打开File菜单,然后选择NewFile...iOSUser InterfaceLaunch Screen

  • 然后通过单击打开项目的设置

  • General标签的区域中App Icons and Launch Images,将设置为Launch Screen File刚刚创建的文件(将UILaunchStoryboardName在中设置info.plist)。

请注意,目前模拟器只会显示黑屏,因此您需要在真实设备上进行测试

将启动屏幕xib文件添加到您的项目:

添加新的启动屏幕xib文件

配置项目以使用启动屏幕xib文件而不是资产目录:

配置项目以使用启动屏幕xob


1
几乎完美的说明,但应该是File-> NEW-> File ...等花了一段时间找到第二个文件:)感谢您的帮助!
威尔

您如何使它们看起来不错?当我尝试在其上放置图像时,它会变得很奇怪。
badweasel 2014年

如果您不仅要显示图像,而且要显示要加载的UI,那么这是个好主意,因为无论图像是否位于情节提要中,图像仍需要具有适当的大小。同样,如果您可以用代码绘制图像,那么您可能会碰到我想的那样。
AppHandwerker 2014年

如果您支持iOS 8之前的版本,则仍然需要提供图像文件,因为启动Xib不向下兼容。
马克·布里奇斯

24

在物理设备上,iPhone 6 Plus的主屏幕范围是2208x1242,nativeBounds是1920x1080。涉及硬件缩放以调整为物理显示器的大小。

在模拟器上,iPhone 6 Plus的主屏幕边界和nativeBounds均为2208x1242。

换句话说,视频,OpenGL和其他基于CALayers像素的事物将处理设备上的真实1920x1080帧缓冲区(在sim 上为2208x1242)。处理点的事物UIKit将处理2208x1242(x3)边界,并在设备上适当缩放。

模拟器无法访问与在设备上进行缩放的硬件相同的功能,并且在软件中对其进行模拟并没有太大的好处,因为它们产生的结果与硬件不同。因此nativeBounds,将模拟设备的主屏幕的设置设置为物理设备的主屏幕的边界是有意义的。

iOS 8向UIScreennativeScalenativeBounds)添加了API,以使开发人员可以确定与CADisplay相对应的分辨率UIScreen


13

对于像我这样想知道如何处理旧版应用程序的人,我对此进行了一些测试和计算。

感谢@ hannes-sverrisson提示,我开始假设在iPhone 6和iPhone 6 plus中对旧版应用程序进行320x568视图处理。

测试使用简单的黑色背景bg@2x.png和白色边框进行。背景尺寸为640x1136像素,背景为黑色,内部白色边框为1像素。

以下是模拟器提供的屏幕截图:

在iPhone 6屏幕截图上,我们可以在白色边框的顶部和底部看到1像素的空白,在iPhone 6 plus屏幕截图上看到2像素的空白。这样一来,我们在iPhone 6 plus上的使用空间为1242x2204,而不是在1242x2208上,在iPhone 6上的使用空间为750x1332,而不是在750x1334。

我们可以假设这些坏点是为了尊重iPhone 5的宽高比:

iPhone 5               640 / 1136 = 0.5634
iPhone 6 (used)        750 / 1332 = 0.5631
iPhone 6 (real)        750 / 1334 = 0.5622
iPhone 6 plus (used)  1242 / 2204 = 0.5635
iPhone 6 plus (real)  1242 / 2208 = 0.5625

其次,重要的是要知道@ 2x资源不仅会在iPhone 6 plus(期望@ 3x资产)上缩放,而且还会在iPhone 6上缩放。这可能是因为不缩放资源会导致意外的布局,原因是放大视图。

但是,这种缩放在宽度和高度上并不相等。我尝试使用264x264 @ 2x资源。给定结果,我必须假定缩放比例与像素/点数比例成正比。

Device         Width scale             Computed width   Screenshot width
iPhone 5        640 /  640 = 1.0                        264 px
iPhone 6        750 /  640 = 1.171875  309.375          309 px
iPhone 6 plus  1242 /  640 = 1.940625  512.325          512 px

Device         Height scale            Computed height  Screenshot height
iPhone 5       1136 / 1136 = 1.0                        264 px
iPhone 6       1332 / 1136 = 1.172535  309.549          310 px
iPhone 6 plus  2204 / 1136 = 1.940141  512.197          512 px

请务必注意,iPhone 6的缩放比例在宽度和高度(309x310)上是不同的。这倾向于证实上述理论,即缩放在宽度和高度上不是成比例的,而是使用像素/点的比率。

我希望这有帮助。


12

查看此信息图:http : //www.paintcodeapp.com/news/iphone-6-screens-demystified

它解释了旧版iPhone,iPhone 6和iPhone 6 Plus之间的区别。您可以看到以点,渲染像素和物理像素为单位的屏幕尺寸比较。您还将在此处找到问题的答案:

iPhone 6 Plus-带有Retina显示屏高清。缩放因子为3,然后将图像从渲染的2208×1242像素缩小为1920×1080像素。

缩小比例为1920/2208 = 1080/1242 = 20 /23。这意味着原始渲染中的每23个像素必须映射到20个物理像素。换句话说,图像被缩小到原始大小的大约87%。

更新:

有上面提到的信息图的更新版本。它包含有关屏幕分辨率差异的更多详细信息,并且涵盖了到目前为止的所有iPhone型号,包括4英寸设备。

http://www.paintcodeapp.com/news/ultimate-guide-to-iphone-resolutions


因此,即使关闭了抗锯齿功能,缩小后是否还会出现非可选的抗锯齿功能?
2014年

如果该信息图表包括4英寸的屏幕,那真是太棒了。
Rajesh 2014年

@Rajesh我已经更新了我的答案,现在检查它以获得有关4英寸设备的信息。
Darrarski 2014年

4

即使我通常不喜欢约翰·格鲁伯(John Gruber)的《大胆的火球》博客的语气,他的《大iPhone猜想》还是值得一读的。

他猜测,但两种型号的像素和像素分辨率都完全正确,只是他不(也不希望)期望苹果打造更小分辨率的物理显示器并缩小比例(详细信息在@Tommy的回答中)。

这一切的要旨是,应该停止以像素为单位思考,而开始以点为单位思考(这已经有一段时间了,这不是最近的发明)以及UI元素的实际尺寸。简而言之,两种新iPhone机型都在这方面有所改进,因为实际上大多数元素都保持相同的大小,您可以在屏幕上容纳更多它们(对于每个更大的屏幕,您可以容纳更多)。

我只是有些失望,对于更大的型号,他们没有将内部分辨率映射为实际的屏幕分辨率1:1。


我们以磅为单位思考,但不幸的是,我们必须在Photoshop上以像素为单位创建图像...
鸭子

2
像素对我们许多人而言都很重要,原因有很多。尽管苹果公司对此主题进行了自己的思想监管,但出于很好的理由,他们在iOS8中勉强添加了[UIScreen nativeBounds]。
ctpenrose 2014年

是的,像素也很重要,但对于图像等静态资产(启动画面等)而言。我的观点(双关语旨在)是为了动态绘制应用程序屏幕的布局。
rawpower 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.