如何为 iPhone 6 / 6 Plus 仅横向应用程序创建启动图像?

Posted

技术标签:

【中文标题】如何为 iPhone 6 / 6 Plus 仅横向应用程序创建启动图像?【英文标题】:How do I create launch images for iPhone 6 / 6 Plus Landscape Only Apps? 【发布时间】:2014-11-13 14:52:59 【问题描述】:

我有一个现有的纯横向应用程序,我正在尝试添加对 iPhone 6 / iPhone 6 Plus 的支持。当我支持 ios 6 / 7 时,我只是使用了默认命名的启动纵向图像,并将横向图像旋转为纵向(即,对于 4 英寸屏幕,我创建了一个 1136x640 的横向,然后旋转以创建一个 640×1136 的启动图像。)

我正在尝试让一些适用于 iOS 8 和 iPhone 6 / 6+ 的东西,但还没有想出一些适用的东西。以下是我尝试过的一些事情:

    遵循 4" 屏幕启动图像约定的模式。我创建了 Default-667h@2x.png 和 Default-736h@3x.png 图像。这确实欺骗了模拟器以正确的 iPhone 6/6+ 分辨率运行,但是当启动时,使用的是 4" 屏幕启动图像,而不是我创建的新图像。 使用资产目录 - 我在 LaunchImages 资产中为 iPhone 6 和 iPhone 6 Plus 创建纵向启动图像,并为 iPhone 6 Plus 创建横向启动图像。 iPhone 6 Plus 可以工作,但 iPhone 6 只是显示黑屏。 (无法在资产目录中创建 iPhone 6 横向启动图像) 在 Info.plist 中指定 UILaunchImages 数组,其中包含所有屏幕尺寸的条目(请参阅参考资料https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html#//apple_ref/doc/uid/TP40009252-SW28)。我在这里得到了与资产目录类似的结果。我可以让 iPhone 6 Plus 横向工作,但不能让 iPhone 6 横向工作。

【问题讨论】:

从 Xcode 6 开始(如果我没记错的话),您可以使用 xibs 或故事板来实现启动屏幕(“splash”)。它可能不适用于每个应用程序,但可以省去很多 DefaultXXX.png 的麻烦。 有同样的问题。 iPhone 6 每次都黑屏。 我尝试做 .xib 启动屏幕文件,它的工作,但我不知道如何支持不同的 iphone 屏幕尺寸的图像的多分辨率! .xib 文件仅适用于 iOS 8,对于不同的 iOS,我们仍然需要图像资源。 向 Apple 发送错误报告。 【参考方案1】:

我找到了一种解决方法,可以让横向仅启动图像在 iOS 8 GM 上工作。我最终在 Info.plist 中使用了 UILaunchImages 数组。诀窍是让图像显示不明确支持横向(iPhone 4/4S、iPhone 5/5S/5C、iPhone 6),您需要指定重复条目。请参阅下面的示例。这适用于支持 iPad 两种方向的纯横向手机应用程序。 iOS 7 将回退到默认图像名称。

所有 iPhone 启动图像都需要像往常一样旋转为纵向,iPhone 6 Plus 启动图像除外。它本身支持横向启动图像,因此您需要将其启动图像保持为横向。

以下是 Info.plist 的相关部分:

<key>UILaunchImages</key>
<array>
    <dict>
        <key>UILaunchImageMinimumOSVersion</key>
        <string>8.0</string>
        <key>UILaunchImageName</key>
        <string>Default</string>
        <key>UILaunchImageOrientation</key>
        <string>Portrait</string>
        <key>UILaunchImageSize</key>
        <string>320, 480</string>
    </dict>
    <dict>
        <key>UILaunchImageMinimumOSVersion</key>
        <string>8.0</string>
        <key>UILaunchImageName</key>
        <string>Default</string>
        <key>UILaunchImageOrientation</key>
        <string>Landscape</string>
        <key>UILaunchImageSize</key>
        <string>320, 480</string>
    </dict>
    <dict>
        <key>UILaunchImageMinimumOSVersion</key>
        <string>8.0</string>
        <key>UILaunchImageName</key>
        <string>Default-568h</string>
        <key>UILaunchImageOrientation</key>
        <string>Portrait</string>
        <key>UILaunchImageSize</key>
        <string>320, 568</string>
    </dict>
    <dict>
        <key>UILaunchImageMinimumOSVersion</key>
        <string>8.0</string>
        <key>UILaunchImageName</key>
        <string>Default-568h</string>
        <key>UILaunchImageOrientation</key>
        <string>Landscape</string>
        <key>UILaunchImageSize</key>
        <string>320, 568</string>
    </dict>
    <dict>
        <key>UILaunchImageMinimumOSVersion</key>
        <string>8.0</string>
        <key>UILaunchImageName</key>
        <string>Default-667h</string>
        <key>UILaunchImageOrientation</key>
        <string>Portrait</string>
        <key>UILaunchImageSize</key>
        <string>375, 667</string>
    </dict>
    <dict>
        <key>UILaunchImageMinimumOSVersion</key>
        <string>8.0</string>
        <key>UILaunchImageName</key>
        <string>Default-667h</string>
        <key>UILaunchImageOrientation</key>
        <string>Landscape</string>
        <key>UILaunchImageSize</key>
        <string>375, 667</string>
    </dict>
    <dict>
        <key>UILaunchImageMinimumOSVersion</key>
        <string>8.0</string>
        <key>UILaunchImageName</key>
        <string>Default-736h</string>
        <key>UILaunchImageOrientation</key>
        <string>Portrait</string>
        <key>UILaunchImageSize</key>
        <string>414, 736</string>
    </dict>
    <dict>
        <key>UILaunchImageMinimumOSVersion</key>
        <string>8.0</string>
        <key>UILaunchImageName</key>
        <string>Default-736h</string>
        <key>UILaunchImageOrientation</key>
        <string>Landscape</string>
        <key>UILaunchImageSize</key>
        <string>414, 736</string>
    </dict>
    <dict>
        <key>UILaunchImageMinimumOSVersion</key>
        <string>8.0</string>
        <key>UILaunchImageName</key>
        <string>Default-Portrait</string>
        <key>UILaunchImageOrientation</key>
        <string>Portrait</string>
        <key>UILaunchImageSize</key>
        <string>768, 1024</string>
    </dict>
    <dict>
        <key>UILaunchImageMinimumOSVersion</key>
        <string>8.0</string>
        <key>UILaunchImageName</key>
        <string>Default-Landscape</string>
        <key>UILaunchImageOrientation</key>
        <string>Landscape</string>
        <key>UILaunchImageSize</key>
        <string>768, 1024</string>
    </dict>
</array>

【讨论】:

即使应用程序在 iphone 6 模拟器上运行良好,是否有必要为 iphone 6 添加默认图像? 有人可以总结一下重要的部分吗?为什么这个 plist 有效,与普通的有什么不同?我使用图像目录,但对这些东西一无所知,抱歉 这个工作的原因是因为相同图像尺寸的横向/纵向方向的重复条目。根本问题是explained in this SO post。 这是一个天才的解决方案!非常感谢。 你救了我最后一根头发不被拔掉,谢谢!【参考方案2】:

iPhone 6 等的模式已经改变

iPhone 6 (750x1334):

默认-375w-667h@2x~iphone.png

iPhone 6 Plus:(1242x2208)

默认-414w-736h@3x~iphone.png

Default-Landscape@3x.png(横向)

请注意,如果您支持 iPad,则必须将 iPad 默认图像重命名为附加 ~ipad,例如Default-Portrait~ipad.png 以防止 6 plus 拾取它们,因为它们覆盖了 3x 图像。

【讨论】:

谢谢,这非常有效,无需在 info.plist 中添加条目。但是你在哪里找到这个模式???? (当然,“Default-736h@3w.png 之类的名称不起作用......) 我通过检查地图等内置应用程序中使用的默认图像找到了它。 哇,非常感谢!这花了我太长时间才找到。 我必须使用此答案中指定的文件名(可能是 ~iphone 所需的后缀)【参考方案3】:

以下步骤对我有用:

    将图像添加到项目(根目录或资源文件夹)中,指定名称如下(我将在 Portrait launchimages 中描述它们):Default.png(3.5 英寸),Default-568h@2x.png(4 英寸) , Default-667h@2x.png (iPhone 6), Default-736@3x.png (iPhone 6plus)。 在常规选项卡上转到目标设置、应用程序图标和启动图像 -> 将启动图像源设置为不使用资产目录(“不使用资产目录”)。 从您的主图像资产中移除 LaunchImage 资产 在常规选项卡上转到目标设置、应用程序图标和启动图像 -> 将启动图像源设置为使用资产目录 XCode 6 将询问您有关从现有图像迁移图像资产的问题。只需点击“迁移”即可。

它适用于 iOS7、iOS8 上的各种设备。 笔记: 如果您检查新的 LaunchImage 资产,那么您会发现它真的很奇怪。它似乎只包含一些图像,没有 iPhone6 或 iPhone 6plus 分辨率的图像。

【讨论】:

你确定这有效吗?听起来它只是使用 iPhone 6/6 Plus 的 4 英寸图像。我认为它曾经也在做类似的事情。 是的,我确定。 iPhone 6 和 6 Plus 将使用正确的启动图像,您甚至可以在模拟器中对其进行测试。顺便说一句,如果您设置的启动图像的分辨率不正确,那么它会破坏您的应用程序布局。 优秀的答案.. 对我来说真的很好用...谢谢【参考方案4】:

对于 iPhone 6:

750 x 1334 (@2x) 纵向 横向 1334 x 750 (@2x)

对于 iPhone 6 Plus:

纵向 1242 x 2208 (@3x) 横向 2208 x 1242 (@3x)

或者你可以通过这个链接它可能对你有帮助

http://matthewpalmer.net/blog/2014/09/10/iphone-6-plus-launch-image-adaptive-mode/

【讨论】:

我知道正确的图像尺寸是多少。问题是,如果您的应用是横向的,它就不会显示。 答案和链接没有解决问题【参考方案5】:

如果您只使用 Images.xassets “启动屏幕文件”应该为空。 它帮助了我。

【讨论】:

【参考方案6】:

这是@AlexArgo 的回答的后续,它扩展了它,以便仅横向、支持 iOS 9 的应用程序在 iOS 9 iPhone 上显示适当的启动图像。与该答案一样,不需要资产目录、故事板或 xib。

如果没有这些添加,我们看到的行为是在 iOS 9 iPhone 上启动我们的纯横向应用程序会显示与 iOS 8 相同的图像,但图像顺时针旋转了 90 度,并由于被拉伸到相反方向而扭曲- 方向的尺寸。

预修复 iOS 9 iPhone 启动屏幕:

这个解决方案有两部分:

    将以下 iOS 9 项目添加到您的 Info.plistUILaunchImages 数组之前来自@AlexArgo 的答案的 iOS 8 项目。

    将以下 iOS 9 项目中引用的新启动图像(例如Default-iOS9-568h)添加到您的应用程序。新的发布图像是实际“横向”方向的图像(比它们的高度宽),与@AlexArgo 的 iOS 8 项目引用的图像不同,这些图像开始是横向图像,但随后被旋转为纵向方向在添加到应用程序之前。请注意,这两组图像必须保留在应用程序中,此解决方案才能同时在 iOS 8 和 9 上运行。

    <key>UILaunchImages</key>
    <array>
        <dict>
            <key>UILaunchImageMinimumOSVersion</key>
            <string>9.0</string>
            <key>UILaunchImageName</key>
            <string>Default-iOS9</string>
            <key>UILaunchImageOrientation</key>
            <string>Landscape</string>
            <key>UILaunchImageSize</key>
            <string>320, 480</string>
        </dict>
        <dict>
            <key>UILaunchImageMinimumOSVersion</key>
            <string>9.0</string>
            <key>UILaunchImageName</key>
            <string>Default-iOS9-568h</string>
            <key>UILaunchImageOrientation</key>
            <string>Landscape</string>
            <key>UILaunchImageSize</key>
            <string>320, 568</string>
        </dict>
        <dict>
            <key>UILaunchImageMinimumOSVersion</key>
            <string>9.0</string>
            <key>UILaunchImageName</key>
            <string>Default-iOS9-667h</string>
            <key>UILaunchImageOrientation</key>
            <string>Landscape</string>
            <key>UILaunchImageSize</key>
            <string>375, 667</string>
        </dict>
        ...(pre-iOS 9 items)...
    </array>
    

后修复 iOS 9 iPhone 启动屏幕:

【讨论】:

【参考方案7】:

要使用 ipad(横向和纵向模式),您需要在 info.plist 中添加 UILaunchImages~ipad 键:

<key>UILaunchImages~ipad</key>
    <array>
        <dict>
            <key>UILaunchImageMinimumOSVersion</key>
            <string>7.0</string>
            <key>UILaunchImageName</key>
            <string>Default-Landscape</string>
            <key>UILaunchImageOrientation</key>
            <string>Landscape</string>
            <key>UILaunchImageSize</key>
            <string>768, 1024</string>
        </dict>
        <dict>
            <key>UILaunchImageMinimumOSVersion</key>
            <string>7.0</string>
            <key>UILaunchImageName</key>
            <string>Default-Portrait</string>
            <key>UILaunchImageOrientation</key>
            <string>Portrait</string>
            <key>UILaunchImageSize</key>
            <string>768, 1024</string>
        </dict>
        <dict>
            <key>UILaunchImageMinimumOSVersion</key>
            <string>7.0</string>
            <key>UILaunchImageName</key>
            <string>Default-Landscape</string>
            <key>UILaunchImageOrientation</key>
            <string>Landscape</string>
            <key>UILaunchImageSize</key>
            <string>748, 1024</string>
        </dict>
        <dict>
            <key>UILaunchImageMinimumOSVersion</key>
            <string>7.0</string>
            <key>UILaunchImageName</key>
            <string>Default-Portrait</string>
            <key>UILaunchImageOrientation</key>
            <string>Portrait</string>
            <key>UILaunchImageSize</key>
            <string>768, 1004</string>
        </dict>
    </array>

【讨论】:

【参考方案8】:

对于除 plus 之外的所有 iPhone,仅横向应用程序没有单独的启动屏幕。您按照 Deepak 的描述在 plist 中设置方向,然后将 portrait 启动屏幕设置为横向启动屏幕的旋转版本。

这一直是这样,唯一改变的是 plus 现在支持单独的、独特的横向启动屏幕。无论您的应用的启动方向如何,所有其他设备仍仅支持纵向启动屏幕。

【讨论】:

【参考方案9】:

我所做的是将我的项目更改为不使用资产目录作为启动图像,并使用适用于 iOS7 和更早版本的旧技术。这将使启动图像适用于 iOS7 及更早版本。

要让它们也适用于 iOS8,以便您获得正确的分辨率,并让您的应用被识别为为新的 iPhone 6/+ 构建,您还需要创建一个新的 LaunchImage XIB 并告诉 Xcode 使用它.

似乎发生的情况是,在 iOS8 设备上启动应用程序使用新的 XIB 技术,而在 iOS7 或更早版本的设备上启动应用程序使用您已经熟悉和喜爱的图像。

这对我来说似乎有效。这是丑陋的 IMO,但它有效。

希望这对某些人有所帮助。

【讨论】:

【参考方案10】:

您只需添加 iPhone6-Portrait@2x.png,然后它也会自行修复为横向。我还有一个适用于 iPhone 6 和 iPhone 6 Plus 的横向应用程序,它可以正常运行!

【讨论】:

【参考方案11】:

要以横向模式启动应用程序,请编辑 Info.plist 文件以添加具有适当值(UIInterfaceOrientationLandscapeRight 或 UIInterfaceOrientationLandscapeLeft)的 UIInterfaceOrientation 键,如下代码所示。这会提示系统在启动时适当地设置状态栏的方向。

清单 1:以横向模式启动应用程序

<key>UIInterfaceOrientation</key>
<string>UIInterfaceOrientationLandscapeRight</string> 

更多信息click here

【讨论】:

你也可以参考苹果文档developer.apple.com/library/ios/technotes/tn2244/_index.html 我在横向启动应用程序时没有问题。问题是启动应用程序时没有启动图像。我只是黑屏。

以上是关于如何为 iPhone 6 / 6 Plus 仅横向应用程序创建启动图像?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 iPhone 6 和 6 Plus 上的应用启用原生分辨率?

如何为所有 iPhone 设备支持一个 xib,直到 iPhone 6 Plus?

支持iPhone 6和iPhone 6+,具有不同的启动/启动屏幕图像,适用于iPad纵向和横向方向

为 iPhone 6 Plus 横向设置 UIModalPresentationStyle?

iPhone 6 Plus 横向模式下带有标签和固定元素的奇怪错误

如何为 iPhone 6/7 自定义边到边图像指定尺寸?