启动图在我的iOS应用中没有显示出来。

149

我希望在使用Xcode 6.0.1构建的应用程序中显示一个简单的启动屏幕。

我已经通过两种方式添加了启动屏幕:作为XIB(默认名称为LaunchScreen.xib)和作为xcassets中的launchimage设置。

我确保我的“启动屏幕文件”设置为LaunchScreen.xib。

我模拟了每个可用的设备(例如,“iPhone5 iOS8” /“iPhone5s iOS8” /“iPhone6 iOS8”。请注意,模拟器中仅提供iOS 8)。


启动屏幕中使用的图像不应该放在Images.xcassets中,而应该放在bundle中。可以尝试使用一个不在xcassets中的测试图像,并将另一个背景颜色设置为.xib本身,以查看它是否正在加载.xib。 - Juan Boero
@JuanBoero 为什么要打包在一起?它们只在构建时使用,而不是运行时。 - Rudolf Adamkovič
请查看此链接 https://dev59.com/TF4c5IYBdhLWcg3wnrf9#49802421。 - Nike Kov
28个回答

239

这个应该是件小菜一碟的事情,但是我却遇到了很多问题。这是我做的:

使用xcassets

我决定使用.xcassets来代替启动页的 .xib 文件,并删除了 .xib 文件。如果你的项目中已经有 images.xcassets,那太好了,否则你可以从 File > New > file 添加一个:

AddNewASsetCatalog

创建启动图片集

现在,在导航区域右键单击,至少要在 .xcassets 文件中创建一个启动图片集和图标集。

Add new Launch image and app icon

更新应用图标和启动画面设置

然后,我确保我的目标中的“应用程序图标和图像集”的设置如下所示。

非常重要:确保“Launch screen file”设置为空白。

Apps icon and image sets

添加图片

最后,苹果用于设备选择的术语很令人困惑。最初,我认为由于我仅部署iOS8(iPhone Portrait),我可以这样做,并只放置 iPhone 6 和 iPhone 6+ 的启动图片:

Devices

我很快意识到这并不是这样工作的,并且我收到了一个警告:“需要一个适用于 iOS 7.0 及更高版本的 iPhone Retina(4 英寸)启动图像。”

所以,我不得不选择 iOS 7.0 及更高版本下的 iPhone 并添加一个 iPhone 5s 图像。

因此,要找出右侧应选哪些框,请不要问自己:“我的最小 iOS、设备和设备方向是什么”,而应该问:

有哪些设备可以支持我的最低iOS版本?那么这些设备所支持的最低iOS版本是什么?请确保勾选所有这些框。对于我来说,我以8.0为目标定位iPhone 5s、6和6 Plus,但考虑到iPhone 5s也可以存在7.0版本,我需要勾选7.0版本框以显示图像占位符。换句话说,右侧的(iOS)复选框显示了该设备可用的最低iOS版本,您需要单击它以显示图像占位符,并放置一个图像,无论您是否在部署此iOS版本。

添加所有设备

输入图片说明


2
这东西真的很烦人。 - ReduxDJ
5
您赢得了互联网。 - OhadM
46
这种方法有效,但是只有在将应用程序从设备中删除并重新安装后才能看到更改。即使清除缓存和删除派生数据后,旧的启动屏幕仍然存在。 - Francis Jervis
15
啊啊啊,我需要从手机上删除应用程序才能使更改生效,我刚刚浪费了很多时间 :'( - Phil Hudson
1
一直在寻找答案!像其他人提到的那样,删除应用程序并重新安装非常重要,以使更改生效。我真希望在Xcode 8中这不会那么痛苦。 - darksinge
显示剩余11条评论

31

LaunchScreen.xibLaunch screen interface file base name是我从经验中发现在创建项目时都是占位符。如果您想要仅使用Images.xcassets作为启动屏幕,请删除LaunchScreen.xibinfo.plist项。

如果提供了info.plist设置,您的应用程序将使用xib而不是Images.xcassets


1
很好的简明解决方案。 - Travis M.
2
“arcady bob” 的解决方案对我很有效:我打开了“info.plist”,删除了元素“Launch screen interface file base name”,然后运行我的应用程序,启动图像终于出现了。 - Jose Manuel Abarca Rodríguez
这是旧的,但这是解决我的方法。 - Martin

20

Xcode 8:

在LaunchScreen.xib中使用的图片不应该放在.xcassets里,尝试将它们放到bundle中。

看起来,在加载.xib时,.xcassets中的图像尚未可用。

编辑:由于添加了一些本地化,启动屏幕停止工作了,现在它可以使用从资源库中获取的图像,非常奇怪。


2
补充一下你的答案... 最近我尝试在我的“Launch Screen.storyboard”文件中使用自定义字体。通过阅读这个SO answer以及更多的研究和测试,我发现了原因。对于图片也是如此... Xcode会准备应用程序启动画面的纵向和横向快照,并且(目前)保存在这里:/Library/Caches/Snapshots/<<app_bundle>>/,在支持文件被加载之前完成,包括自定义字体和资源目录。 - andrewbuilder
3
我注意到从.xcasset加载的较大图像(>512px)不会显示在我的LaunchScreen上,而较小的图像则可以显示。感谢提供解决方案! - auco
非常感谢,我花了将近3个小时来调试这个问题。结果发现是.xcasstes的问题。 - Sergey Grischyov
同样的问题,我将在xib中使用的图像文件从1024x1024更改为小于512px的分辨率后,问题得到了解决。 - Eike
1
@JuanBoero 在捆绑包中吗?它们在构建时使用,而不是运行时。 - Rudolf Adamkovič
非常感谢 @Juan,我为此尝试了很多小时。 - Subramani

17
我的解决方案是创建所有启动图像。 输入图像描述 然后我将“ Launch Images Source”设置为“ LaunchImage”资源,将启动屏幕文件留空。 最后,如果项目没有“Launch Screen.xib”文件,则添加该文件并保持不变。 输入图像描述

4
添加过多的图片会增加ipa文件的大小,而XIB启动是解决这一问题的方案。例如,如果您有一个纯色背景和一个简单的标志在中间,那么建议使用XIB。只需设置背景颜色并在中间添加UIImage即可。但再次强调,这是个人选择。 - Jasmeet
将Launch Screen.xib添加进项目中,但不在任何地方使用它,这对我来说实际上起到了作用。谢谢! - Jacco
Xcode 6不让我更改“启动图像源”,但它仍然保留着这个文本,我无法修改:“使用资产目录” - 它的行为更像一个按钮,如果我点击它,我会得到一个选项:将启动图像迁移到资产目录...不知道该怎么办。还有其他人遇到过这种情况吗?我已经将一个完整的文件夹中不同尺寸的预制启动图像导入到LaunchImage资产目录中。没有错误消息,但是即使按照上面的说明重建、重新启动计算机,我也看不到我的启动图像或应用程序图像。 - sunny

12

对我而言,卸载应用并重新启动模拟器是有效的。再次安装时,启动图像出现了预期效果。这种方法也在实际设备上奏效。


卸载应用程序后,我还必须重新启动设备。此外,我清除了Xcode缓存,并重新启动了Xcode。 - lenooh

11

对于使用Asset Catalog的启动图的用户,就像我学到的那样,我曾经遇到这样一种情况:我首先收到了一个jpg文件,然后要求他们将其转换为PNG

我相信他们足够靠谱,所以我首先搜索了互联网,想知道为什么启动图没有显示,并尝试了所有解决方案,但都没有成功。然后我尝试着放回旧的启动图,结果正常工作,这时我才意识到我手上的文件不是真正的PNG文件。

简而言之: 确保你使用的是真正的PNG文件,而不是重命名扩展名的文件。


1
在文件扩展名中小心使用大写字母,虽然设备可以正确定位文件,但模拟器可能无法识别。 - Juan Boero

10

我把Info.plist文件中的“Launch screen interface file base name”删除并将“Launch Screen.xib”放入废纸篓,这对我很有效。


这解决了我的问题。但我认为苹果建议其他人使用xib文件而不是生成9个不同的图像。 - TypingPanda

7

对我而言,只需删除并重新安装应用程序即可解决问题:

  • 在模拟器中测试

    1. 删除模拟器中的应用程序。
    2. 退出并重新启动模拟器。
    3. 在Xcode中再次运行项目。

  • 在设备上测试

    1. 从设备中删除应用程序。
    2. 在Xcode中再次运行项目。

2
对于设备而言,不仅删除和重新安装无法解决我的问题。在我这种情况下,重启手机(设备)是解决方案。 - Kutay Demireren

6
这个被接受的答案有问题,如果您不设置Launch Screen File,则您的应用程序将在诸如iPhone 6&6+等设备上处于缩放模式下 => 渲染模糊。 以下是我所做的完整工作解决方案(我针对iOS 7.1并使用Xcode 8,在每台设备上都有效),真的,我已经为这个缩放问题疯了) 1. 准备你的.xcassets 为了简化起见,我使用了矢量.PDF文件。 这非常方便,避免为每个分辨率(1x,2x,3x ...)创建多个图像。 我还假设在此之前您已经创建了xcassets。
  • 将启动屏幕图片(或矢量文件)添加到您的项目中
  • 转到.xcassets并创建一个新图像集。 在Image的Attributes窗口中,选择Scales -> Single Scale
  • 将矢量文件拖放到Image Set中。

Create an Image Set for your .xcassets

2. 创建启动屏文件

Create a Launch Screen file

3. 将您的图像添加到启动屏幕文件中

  • 向您的启动屏幕文件中添加一个图像视图对象(删除自动创建的标签)。此图像视图应引用先前的.xcassets图像集。您可以从Name属性中引用它。在此阶段,您应该正确地在图像视图中看到您的启动屏幕图像。
  • 为此图像视图添加约束以保持纵横比取决于屏幕分辨率。

Add the splash screen image to your Launch Screen file

4. 将启动屏幕文件添加到您的目标中

最后,在您的目标通用属性中,引用启动屏幕文件。 目标属性和启动屏幕

启动您的应用程序,您的闪屏应该显示出来。还可以在iPhone6和iPhone6+上尝试,您的应用程序应该正确显示,没有任何缩放(启动屏幕文件旨在实现此目的)。


我尝试了这个,但它没有起作用:https://dev59.com/IqDia4cB1Zd3GeqPFY3r 有什么想法吗?非常感谢。 - Kartick Vaddadi
我刚才找到了解决方法。我的启动图像没有显示出来,在设备 (iPhone 6、7+) 或 TestFlight 上启动时会出现白屏。修复方法:将 "Landing_screen.png" 重命名为 "Landing_screen",去掉 .png 部分。在 Xcode 中的图像图标变成了白色图标,在启动屏幕 storyboard 中,该图像现在出现为问号。现在,启动图像已经出现了,而不是白屏。 - Brian Bird
我有一个类似的问题。当使用矢量图形(pdf)时,图像在启动屏幕中不显示,但如果我使用与主屏幕相同的故事板(在启动屏幕后显示),我可以看到图像。因此,我的猜测是矢量图形不适合作为启动屏幕。 - Adi
我通过重新启动模拟器使其正常工作。之前,我删除了应用程序并清理了项目,但启动画面仍未显示。 - Adi

5

在这个问题上我苦恼了几个小时,最终决定使用以下方法。这种方法适用于iPhone和iPad(在Xcode 6.1上)。

  1. 文件 >> 新建文件 >> 用户界面 >> 启动屏幕
  2. 在YourApp-Info.plist中创建新的键/值:"Launch screen interface file base name" / "Your Launch Screen Name"

一张图片胜过千言万语,请看下图:

文件 >> 新建文件 >> 用户界面 >> 启动屏幕

在YourApp-Info.plist中创建新的键/值:"Launch screen interface file base name" / "Your Launch Screen Name"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接