UIImageView缺少设备启动屏幕中的图像


301

我有一个支持iOS8和更高版本的应用程序,内置在Xcode 7中,并且正在使用XIB进行启动屏幕(我没有启动图像)。该视图包含一个包含应用程序版本的UILabel,以及两个包含Image.xcassets中都存在的图像的UIImageViews:一个徽标和一个初始图像。

启动应用程序时,UILabel和徽标图像正确显示,但是如果我在具有iOS9的iPad Air 2上运行该应用程序,则启动图像不会显示。我已经在运行iOS8的Air和Mini以及运行于iPad 2,iPad Air和iPad Air 2的iOS9模拟器上进行了测试,并且所有这些图像均正确显示。

我跑了一些基本的故障,看看我能想出什么要去,但我一直没能解决这个问题,我可以说的工作的形象而这失败的一个之间看到的唯一区别是,当我把它添加到资产...

这是我所知道的摘要:

  • 初始图像的UIImageView放置在正确的位置,且大小正确。我可以说这是因为我将其背景色设置为绿色只是为了确保。视图在那里,但是图像不出现。因此,我认为这一观点不应该受到指责。

  • 将初始图像设置为也使用徽标图像的UIImageView,将使徽标图像显示在视图的正确位置。这也使我假设观点不应该受到指责。

  • 我在初始图像视图中使用的UIImage在应用程序的其他位置使用,并且在其他视图中显示正常(徽标图像也在应用程序的其他位置使用,并且显示正常)。因此,我假设图像是有效的,并且使其出现在其他视图中不是问题。

  • 我已经确认xcassets文件中徽标和启动画面的UIImages设置是相同的。它们设置为“通用”,“任何宽度和高度”,“多个比例因子”,默认显示。有一个区别-徽标具有1x,2x和3x比例,而初始图像只有1x和2x,但是我也尝试过在UIView中使用仅包含1x,1x和2x值的UIImage,并且它们可以正常工作(如果它们是已添加到项目中)。

  • 将其他大小或格式(PNG和JPG)不同的图像添加到我的xcassets并在UIImageView中使用该UIImage作为启动图像也无法显示。

  • 在XIB文件中添加另一个UIImageView并为其分配一个已经在xcassets中工作的UIImage,该图像将出现在加载屏幕中。

  • 复制和重命名用于徽标的图像文件并将其添加到项目中,然后在初始视图中使用该UIImage也会显示失败。

  • 我试图清理项目,重新启动开发计算机,并从Air 2中删除该应用程序,然后重新安装它,以防万一出现问题。

这最后三个步骤使我相信,在项目文件的生命周期中的某一点之后添加图像存在一些问题。当我昨天更新到Xcode 7时,初始图像最初是在Xcode 6中添加的,而徽标图像(也在Xcode 6中也添加了)是几个月前添加的。

我查看了徽标图像和初始图像的json文件,它们似乎具有相同的格式。我也浏览了pbxproj文件以查找差异,但看不到任何差异。

所以我想知道是否有人知道为什么启动屏幕可能不显示我专门在Air 2上添加的这些新图像?我一直在阅读的其他问题与未出现的图像有关,似乎都与“启动图像”或XIB文件中具有相关类的图像有关,在这里似乎都不相关。


1
回答这个问题的意思是-我回来阅读了提供的答案,然后返回Xcode并重新添加UIImageView和图像以进行尝试。这次,它没有任何变化地工作。我不知道为什么-之前使用相同版本的Xcode,重新启动,重建,清理和删除了该应用程序,相同的iOS,相同的Mac OS,它才起作用。因此,不幸的是,我无法验证是否有任何解决方案会有所帮助。
MFW

对我来说,没有提供的答案可以解决问题。模拟器,iPhone 5,iPhone 5 SE,iPad 4都在我的LaunchScreen.xib中正确显示了UIImageView,iPad Air 2无法显示它。重新启动所有设备,然后在所有设备上重新安装。行为依然存在。
基督教徒

嘿,您应该接受130票以上的投票答案。
庆阮

我同意Khanh,它对大多数人都有效!
gunjot singh

@MFW,接受答案FFS!IM向警察报告。
GeneCode

Answers:


474

关闭后再打开。

认真地,重新启动设备-这就是修复它的原因。

这是行不通的:

  • 清除DerivedData
  • 清理项目
  • 从设备上卸载应用程序
  • 重新启动Xcode
  • 重新启动电脑

较早的观察结果:

就像其他人一样:

  • 在模拟器中正常工作
  • 用于在设备(iPhone 5S,iPad Air)上工作
  • 没有代码更改(通过git reset --hard HEAD验证),但停止工作。

我记得触发它停止工作的第一个版本的原因是在运行iPhone时拔掉了它的电源。(不确定是否相关。)

但是,git reset无法修复(结合所有不起作用的干净步骤),告诉我它必须被缓存在其他地方。.gitignored文件之一很可能是?(我正在对Xcode项目使用Git忽略文件

一种解决方法适用于一个UIImageView(在具有三个的UIView中),但不适用于其他解决方案,是将图像放入.xcassets文件。恢复为普通图像文件不会撤消该修复程序。(确实感觉像是一个缓存错误。)

更新:请参阅顶部-重新启动设备是对其进行修复的原因。我感觉到错误的位图数据正在设备本身上缓存。

雷达:http//openradar.appspot.com/23534818


31
只需重新启动模拟器即可为我完成。疯!
FractalDoctor 2015年

1
谢谢!这也为我解决了。
CodenameDuchess

6
您认为App Store用户会遇到同样的问题吗?
亚当·怀特

1
@danielstorm从未发现自己是诚实的
Adam Waite,

2
真是个弱智的虫子,gg苹果。重置手机对我有用,谢谢。
雅各布·金

151

“对我来说,解决方案只是确保在情节提要中的UIImageView未被选中“ Clears Graphics Context”框。只需为我更改此设置即可。没有其他解决方案对我有用。从苹果开发者论坛上获得了它

在此处输入图片说明


2
该死的,我从来没有想过尝试这个。修复模拟器和设备在Xcode 7.3.1(7D1014)和iOS 9.3.2测试版开发3
五十雀

3
我可以确认这也对我有用。Xcode 7.3和iOS 9.3.2。
TorbjørnKristoffersen

1
即使已经检查了我的-取消检查并重新检查也能解决问题!
lonesomewhistle,2016年

1
尼斯+1答案,也可以在Xcode 8和iOS 10中使用
Skovie 2016年

1
这是正确的答案。在设备上的iOS 11上得到证明。
jberlana

99

我在iPhone 6上遇到了完全相同的问题。

一个非常奇怪的事实是,我能够使用我的images.xcassets中的另一个图像,该图像具有相同的大小,压缩率,色彩空间...

我无法找到为什么它不起作用,但是我找到了一个解决方案:只需将文件放在images.xcassets之外,然后在Interface Builder中使用其全名(带有扩展名)

演示图板示例中的splashScreen

希望对您有所帮助!


1
那是我尝试的第一件事,但是对我来说不起作用。
Paul Slocum 2015年

这对我有用;谢谢。我希望我知道为什么它只对xcassets文件中的某些图像起作用...
Christopher King

首先,这对我有用,但是现在图像或标签属性根本没有更新。即使采取清洁的产品措施。在此处提交错误:bugreport.apple.com
菲利普·博尔赫斯

删除应用程序后重新启动iPhone 6s即可完成工作。在此之前,还要检查“清除图形上下文”下面的NikLanf解决方案。
马修·弗格森

这可行。原因是我认为由于显示启动屏幕时尚未加载.xcasset。如果您考虑一下,这就是启动屏幕的用途-等待ios加载ios的时间,其中包括xcasset。我的猜测是将其放置在外部,因为应用程序根文件夹中的所有内容都将首先加载。
GeneCode'1

33

以下操作序列为我在Xcode 7.3.1和iOS 9.3.4上解决了该问题:

  1. 清理您的构建(⌘+⇧+ K)
  2. 关闭Xcode
  3. 硬重置iOS设备(重新启动电源+主页按钮)
  4. 重新启动Xcode-完成索引编制后即可在设备上构建。

拯救了我的一天!谢谢!
Zack Zhu

工作了 我没有执行步骤2和4,也许只需要对iOS设备进行硬重置,有人可以确认吗?
蒂莫西LJ斯图尔特

@ TimothyL.J.Stewart第2步和第4步只是我采取的预防措施,因为该问题对我来说很烦人-因此只能确定。我认为您说对了,因为它们实际上并没有真正(通常)影响构建,因此可能是不必要的。
mayankk2308 '16

Xcode 8 Swift 3.0关闭电源或进行硬重置是唯一每次都有效的事情,并且每次添加新资产时都必须完成。不会删除DerivedData。但是,该图像在模拟器中可以正常工作。这浪费了我很多时间,谢谢@MayankKumar提供的解决方案。
蒂莫西LJ斯图尔特

像魅力一样工作
lborgav

27

许多其他答案表明,重新启动设备和/或重建和/或重新安装是解决方案。

这些答案对我们中的某些人有用,但之所以起作用,是因为该应用程序被迫“重新获取”或“重建”缓存的快照。

在将支持数据加载到内存(包括包含故事板图像的资产目录)之前,应用程序使用缓存的快照来呈现图像。

@jaga的SO答案提供了解决方案,但不是为什么UIImageViews在设备的启动屏幕中丢失的原因(但在模拟器中却没有)。

背景

最近,我尝试在“启动Screen.storyboard”文件中使用自定义字体。

阅读@TimCamber的SO答案后,我不清楚的原因促使我进行了更多的研究和测试。

自定义字体未包含在我的启动屏幕情节提要文件中的原因与资产目录中不包含图像的原因相同...

该应用程序会从“启动屏幕”故事板文件中为应用程序的启动屏幕准备纵向和横向快照,并(当前)将其保存在以下应用程序包中:

  • /Library/Caches/Snapshots/<<app_bundle>>/
  • /Library/Caches/Snapshots/<<app_bundle>>/downscaled/

在加载任何支持文件(包括任何自定义字体和资产目录)之前,此过程已完成。

如上所述,通过遵循@jaga的解决方案,实际上所需要做的只是:

  1. (旧学校)将图像文件(.PNG)添加到应用程序的捆绑包中(如下面的屏幕截图所示,我将图像文件添加到了图像子目录中的Supporting Files子目录下),并且

Xcode中Project Navigator中相关目录的屏幕快照

  1. 在启动屏幕情节提要文件中的UIImageView对象中引用该图像...

Xcode中的属性检查器下的UIImageView的“图像视图”部分的屏幕快照


谢谢,我已经为此努力了一段时间。这对我行得通。
詹姆斯·劳伦斯汀

直接为我工作。这应该是正确的答案
Mohammad Shraim'Mar

在启动时,IOS无法编译资产,因此将映像捆绑在一起即可。谢谢。
icould

到目前为止最好的答案。我将添加:图像必须位于应用程序捆绑包的根目录中。否则,如果您将图像存储在子目录中,则必须提供完整路径“ Media / launch_v1_200_mod.png”。
MoVod

1
我也一样 我的应用程序已经启动,但问题是有时它正在显示图像,有时它在屏幕中间显示带有白色的正方形
Punit 18'Oct

21

我看到了同样的问题。重新启动设备(iPhone 6)并将应用程序重新构建到设备上是修复它的唯一方法。我尝试了许多其他技巧和建议,但没有其他办法。只有重启+重建才有帮助。


如果用户从AppStore更新应用程序,将会如何?他需要重启设备吗?
kokos8998 2016年

17

我的解决方案@iOS 11.x:

  • 使用.jpg图片代替.png。我认为图片文件大小很重要;
  • (可选)将图像文件放置在项目目录中,而不是.xcassets;

3
将图像文件置于.xcassets帮助之外
Husam

@Husam我真的认为只有文件大小很重要。我有一个包含两个图像的启动屏幕:一个大图像(400 + KB .png)和一个徽标(10 + KB .png,位于.xcassets内)。徽标始终正常显示,但大字体则不显示。
Ke Yang

您是对的。在我发表评论后,添加另一张图片后问题再次出现。感谢您的帮助
-Husam,

2
然后按照您的指示使用jpg图像并进行了处理
-Husam,

16

我从TestFlight安装的应用程序具有相同的功能。 删除应用程序->然后重新启动iPhone->然后重新安装应用程序对我有用。只是重新安装应用程序或只是重新启动设备都无济于事。


这是唯一对我有用的东西-希望我在90分钟前见过!
KML

希望我4个小时前见过
gerry.liang '16

也为我工作,但问题很奇怪:|
Nishu_Priya

8

我遇到了同样的问题,但是重新启动设备没有帮助。对我有用的是从启动故事板上删除UIImageView并添加一个新的。



7

对我有用的是从Simulator菜单中选择Reset Content and Settings ...

重置内容和设置菜单


6

将图像从Image.xcassets中取出,然后再次将它们添加到项目中。它为我工作。


之所以起作用,是因为您正在强迫应用重新创建启动屏幕快照,但这并不是解决问题的方法或原因。
andrewbuilder

6

从移动设备中删除应用程序,然后重新启动移动设备并再次安装应用程序。现在问题将会解决


5

我使用iPhone 5s设备,也遇到这个问题。

我通过以下方式修复它:

  • 删除驱动器数据

  • 清理项目

  • 重新启动Xcode

  • 从我的设备中删除项目

  • 重新启动5s。

我认为使用内存是Xcode的错,系统可能为Xcode分配了一些内存,导致Xcode绘制午餐图像失败(在我的计算机上,Xcode运行了好几个星期而没有关闭)


我不知道,但是效果很好。谢谢的人分享。
Arpit B Parekh

4

我在iPad和iPhone设备的Xcode 7中也遇到了这个确切的问题。尽管这没有任何意义,但我大部分时间都可以通过将Image视图中的Image以及Highlighted图像设置为我的images.xcassets中的同一图像来解决它。


似乎也对我有所帮助
rafalkitta '16

4

我认为启动屏幕仅支持Assets.xcassets中的图像。


我尝试了以上所有答案,但没有一个对我有用。但是这个答案解决了这个问题。
Ercan Celik

4

对我有用。

首先在xcode clean de project中。

如果您使用模拟器,请删除应用并重新启动。

如果使用设备,请删除应用程序并重新启动设备。


3

重新启动Xcode为我做到了。

什么没有做到这一点:

  • 清理构建文件夹
  • 重新启动设备或模拟器(两个图像均不可见)

3

选择ImageView,然后在属性检查器选项卡>“图像视图”>“图像”>“图像名称”中删除图像扩展名(.png或.jpg)。

在launchscreen.storyboard上,图像不会出现,但是会在设备中显示。这对我有用。


这也是我的问题。奇怪的是,它在某些设备上随机工作。具有Xcode 9.4的Xamarin-Project,用于XIB / Storyboard编辑...
fl034

2

这似乎是iOS的错误。有时系统动画消失了。

现在,我刚刚重新启动了iPhone,它对我来说是有效的。


2

就我而言,它是图像名称
我添加了一个名为Default-568h@2x.pngLaunchScreen.xib 的图像-我的旧启动屏幕之一仅用于测试目的。我当时在iPhone X Simulator上构建图像,但没有显示。

将名称更改为中性名称(MyImage.png)解决了该问题。

看来,这既是@2x问题的一部分,也是问题的一部分-568h。在-812h@3x设备上有意义。


2

这太重要了, 一定是空的Launch Screen File

在此处输入图片说明


8
他正在使用XIB故事板进行发布,此答案将无效。
Benck

2

一个简单的解决方案是使用JPG而不是PNG。


1

我对imageView启动屏幕情节提要板有相同的问题。我从项目中删除了图片的引用,我将图片重命名并再次添加到项目中。一切正常。


1

也可以1.删除项目图像2.更改图像名称3.将文件图像添加到项目

它为我工作。


1

我在iPhone 6的iOS 10和模拟器中都遇到了这个问题。我的图像在一个文件夹中,这似乎是个问题。我从Xcode的文件夹中删除了图像,并将其放在项目的基本目录中,这解决了该问题。



1

接下来帮助了我:

  • 将“启动屏幕文件”更改为另一个XIB
  • 运行应用
  • 换下臂

同样非常重要:请检查您是否在另一个标签页中未打开xib,这也可能导致它!


1

我找到了一个对我有用的简单但根本的解决方案:

1-删除文件:LaunchScreen.storyboard并将其移到垃圾箱。

2-产品->清洁

3-创建一个名为:LaunchScreen.storyboard的新启动屏幕文件,并将图像放入其中

4-保存并构建

在尝试了数小时的复杂方法之后,这对我有用。似乎我的LaunchScreen.storyboard被写锁定并且无法保存,或者一个奇怪的缓存过程将其阻止了。


1

图像名称是问题。重命名启动屏幕情节提要板中使用的图像名称。确保不要使用字母数字以外的任何字符(不要使用“ _-&@”)。

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.