UIImageView在设备上的启动屏幕中丢失图像

MFW*_*MFW 296 objective-c uiimageview uiimage ios launch-screen

我有一个支持iOS8及更高版本的应用程序,内置Xcode 7,我使用XIB作为启动屏幕(我没有启动图像).该视图包含一个带有应用程序版本的UILabel,以及两个带有图像的UIImageViews,这两个图像都存在于Images.xcassets中:一个徽标和一个启动图像.

启动应用程序时,UILabel和徽标图像显示正确,但如果我在带有iOS9的iPad Air 2上运行应用程序,则不会显示启动图像.我已经在Air和Mini上测试过运行iOS8,以及适用于iPad 2,iPad Air和iPad Air 2的iOS9模拟器,所有这些都能正确显示图像.

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

这是我所知道的简要说明:

  • 启动图像的UIImageView位于正确的位置,大小正确.我可以告诉这个,因为我将它的背景颜色设置为绿色只是为了确保.视图在那里,但图像不会出现.所以我假设这个观点不应该受到责备.

  • 将启动图像的UIImageView设置为也使用徽标图像可使徽标图像显示在视图的正确位置.这也让我认为这个观点不应该受到指责.

  • 我在启动图像视图中使用的UIImage在应用程序的其他地方使用,在其他视图中显示得很好(徽标图像也在应用程序的其他地方使用,看起来很好).所以我假设图像有效并且让它出现在其他视图中不是问题.

  • 我已经确认xcassets文件中徽标和启动的UIImages设置是相同的.它们设置为通用,任意宽度和高度,多个比例因子,默认呈现.有一个区别 - 徽标有1x,2x和3x刻度,而初始图像只有1x和2x,但我也试过在UIView中只使用1x,1x和2x值的UIImages它们可以工作(如果它们是不久前加入了该项目).

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

  • 将另一个UIImageView添加到XIB文件并为其分配已在xcassets中运行的UIImage,图像将显示在加载屏幕中.

  • 复制和重命名用于徽标的图像文件并将其添加到项目中,然后在启动视图中使用该UIImage也无法显示.

  • 我已经尝试清理项目,重新启动开发机器,并从Air 2中删除应用程序并重新安装它以防万一出现问题.

最后三个步骤让我相信,在项目文件的生命周期中的某个点之后添加图像存在一些问题.虽然我昨天更新到Xcode 7,但最初在Xcode 6中添加了启动图像,但几个月前添加了徽标图像(也在Xcode 6中添加).

我查看了json文件中的徽标图像和启动图像,它们看起来格式相同.我还浏览了pbxproj文件,寻找差异,我看不到任何差异.

所以我想知道是否有人知道为什么发射屏幕可能无法显示我在Air 2上特别添加的这些新图像?我一直在阅读的有关未出现的图像的其他问题似乎与启动图像或与具有关联类的XIB文件中的图像有关,这两者似乎都不相关.

Ara*_*kan 471

关闭然后再打开.

说真的,重新启动设备 - 这就是为我修复它的原因.

这是不起作用的:

  • 清理DerivedData
  • 清洁项目
  • 从设备卸载应用程序
  • 重启Xcode
  • 重新启动计算机

较旧的观察:

就像其他人一样,它:

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

我记得当它停止工作时触发第一个构建是在iPhone运行时拔掉它.(不确定它是否相关.)

但是,git重置没有修复它(结合所有干净的步骤不起作用)告诉我它必须在其他地方缓存.很可能在一个.gitignored文件中?(我正在使用Git忽略文件进行Xcode项目)

对于一个UIImageView(在UIView中有三个)但不适用于其他UIImageView的一种解决方法是将图像放入.xcassets文件中.恢复到普通图像文件没有撤消修复.(真的感觉像是一个缓存错误.)

更新:请参阅顶部 - 重启设备是什么修复它.我感觉错误的位图数据正缓存在设备本身上.

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

  • 只需重新启动模拟器就可以了.疯! (31认同)
  • 它对我也有用.这是令人难以置信的错误. (6认同)
  • 您认为App Store用户会遇到同样的问题吗? (6认同)
  • 老解决方案总能工作:)谢谢! (3认同)
  • 多么迟钝的虫子,gg apple.我的手机正在为我工​​作,谢谢. (2认同)
  • 刚重启设备对我有用! (2认同)

Nik*_*anf 148

"我的解决方案就是确保在故事板中为UIImageView取消选中"清除图形上下文"框.只需更改它就可以为我修复它." 没有其他解决方案适合我.从苹果开发者论坛得到它

在此输入图像描述

  • 我可以确认这对我也有用.Xcode 7.3和iOS 9.3.2. (3认同)
  • 该死的,我从没想过要试试这个.使用Xcode 7.3.1(7D1014)和iOS 9.3.2 Developer Beta 3修复模拟器和设备. (2认同)

gbi*_*eau 97

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

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

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

故事板样本中的splashScreen

希望这有帮助!


may*_*308 33

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

  1. 清理您的构建(⌘+⇧+ K)
  2. 关闭Xcode
  3. 硬重置iOS设备(电源+主页按钮重启)
  4. 重新启动Xcode - 一旦准备好,就让索引完成并在设备上构建.


and*_*der 26

许多其他答案建议重启设备和/或重建和/或重新安装是解决方案.

虽然这些答案适用于我们中的一些人,但这些工作的原因是因为应用程序被迫"重新获得"或"重建"缓存的快照.

应用程序使用缓存快照在支持将数据加载到内存之前显示图像,包括包含故事板图像的资产目录.

@jaga的这个SO答案提供了解决方案,但不是原因,为什么在设备的启动屏幕中缺少UIImageViews(但不在模拟器中).

背景

最近我试图在我的"Launch Screen.storyboard"文件中使用自定义字体.

在阅读了@TimCamber的这个SO答案之后我无法理解的原因,这促使我做了更多的研究和测试.

我的启动屏幕故事板文件中未包含自定义字体的原因与未包含资产目录中的图像的原因相同...

该应用程序从Launch Screen Storyboard文件准备应用程序启动屏幕的纵向和横向快照,并且(当前)将其保存在您的应用程序包中:

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

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

如上所述,遵循@ jaga的解决方案,所需要的只是:

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

Xcode中Project Navigator中相关目录的屏幕截图

  1. 在Launch Screen Storyboard文件中引用UIImageView对象中的图像...

Xcode中Attributes Inspector下UIImageView的Image View部分的屏幕截图


小智 21

我看到了同样的问题.重新启动设备(iPhone 6)并将应用程序重建到设备是修复它的唯一方法.我尝试了许多其他提示和建议,但没有其他工作.只有reboot + rebuild有帮助.


Pet*_*Shm 16

我对从TestFlight安装的应用程序也有同样的看法. 删除应用程序 - >然后重新启动iPhone - >然后重新安装应用程序适合我.只是重新安装应用程序或只是重新启动设备没有帮助.


Ke *_*ang 16

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

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

  • 将图像文件放在`.xcassets`之外有帮助 (3认同)
  • 然后按照你的指示使用jpg图像并工作 (2认同)

Jim*_*des 8

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


Jak*_*lář 8

您是否尝试过再次打开设备?做吧.


and*_*nil 7

对我有用的是从模拟器菜单中选择重置内容和设置....

重置内容和设置菜单


小智 6

将图像从Image.xcassets中移出并再次添加到项目中.它对我有用.


mid*_*n p 6

从手机上删除应用程序,然后重新启动手机并再次安装应用程序。现在问题将得到解决


小智 5

我在 iPad 和 iPhone 设备的 Xcode 7 中也遇到了这个确切的问题。尽管这毫无意义,但我大部分时间都能够通过不仅将图像而且将图像视图中的突出显示图像设置为我的images.xcassets 中的相同图像来绕过它。


guo*_*zzu 5

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

我修复它:

  • 删除驱动器数据

  • 清理项目

  • 重启Xcode

  • 从我的设备中删除项目

  • 重启5s.

我认为Xcode使用内存是错误的,系统可能会为Xcode分配一点内存导致Xcode绘制午餐图像失败(在我的电脑上,Xcode已经运行了几周没有关闭)


osc*_*lon 5

它对我有用。

首先在 xcode clean de 项目中。

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

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