ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

我进行了一些基本的故障排除,看看我是否能弄清楚发生了什么,但我无法解决它,我能看到的唯一区别是在工作的图像和失败的图像之间,当我将它添加到资产...

以下是我所知道的概要:

初始图像的 UIImageView 位于正确的位置,大小正确。我可以这么说,因为我将它的背景颜色设置为绿色只是为了确保。视图在那里,但图像没有出现。所以我假设这个观点不应该受到指责。

将初始图像的 UIImageView 设置为也使用徽标图像会使徽标图像出现在视图的正确位置。这也使我认为这种观点不应受到指责。

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

我已经确认 xcassets 文件中 logo 和 splash 的 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 文件中的图像有关,这两者似乎都不相关。

一直想回复这个问题 - 我回来阅读了提供的答案,然后返回 Xcode 并重新添加了 UIImageView 和图像以试用它们。这一次,它在没有任何变化的情况下工作。我不知道为什么 - 相同版本的 Xcode,我之前重新启动、重建、清理和删除了应用程序,相同的 iOS,相同的 Mac OS,它只是工作。所以不幸的是,我无法验证是否有任何解决方案有帮助。
对我来说,提供的答案都没有解决问题。模拟器、iPhone 5、iPhone 5 SE、iPad 4 都在我的 LaunchScreen.xib 中正确显示 UIImageView,iPad Air 2 不会显示它。重新启动所有设备,重新安装在所有设备上。行为仍然存在。
嘿,您应该接受 130+ 投票的答案。
我同意Khanh,它对大多数人都有效!
@MFW,接受答案 FFS!我向警察报告你。

C
Community

如果关闭,请关闭然后再次打开。

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

这是没有用的:

清理 DerivedData

清理项目

从设备中卸载应用程序

重启 Xcode

重新启动计算机

较早的观察:

就像其他人一样,它:

在模拟器中工作正常

用于在设备上工作(iPhone 5S、iPad Air)

没有代码更改(通过 git reset --hard HEAD 验证),但停止工作。

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

但是, git reset 没有修复它(结合所有不工作的清理步骤)告诉我这必须被缓存在其他地方。很可能在 .gitignored 文件之一中? (我正在使用 Git ignore file for Xcode projects

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

更新:见顶部 - 重新启动设备是修复它的原因。我感觉设备本身缓存了错误的位图数据。

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


只需重新启动模拟器就可以了。疯狂的!
谢谢!这也为我修复了它。
你认为 App Store 用户会遇到同样的问题吗?
@danielstorm 从来没有发现是诚实的
多么迟钝的虫子,gg苹果。重新启动我的手机对我有用,谢谢。
B
BananaNeil

“对我来说,解决方案只是确保未选中情节提要中 UIImageView 的“清除图形上下文”框。只需更改它即可为我修复它。没有其他解决方案对我有用。从apple developer forum得到它

https://i.stack.imgur.com/01zB1.png


该死的,我从没想过要试试这个。使用 Xcode 7.3.1 (7D1014) 和 iOS 9.3.2 Developer Beta 3 修复模拟器和设备。
我可以确认这也对我有用。 Xcode 7.3 和 iOS 9.3.2。
即使我的已经检查过了——取消检查和重新检查就可以了!
不错的 +1 答案,也适用于 Xcode 8 和 iOS 10
这是正确的答案。在设备上的 iOS 11 上得到证明。
g
gbitaudeau

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

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

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

https://i.stack.imgur.com/t2teu.png

希望这有帮助!


这是我尝试的第一件事,但它对我不起作用。
这对我有用;谢谢。我希望我知道为什么它只适用于 xcassets 文件中的某些图像......
这对我来说一开始就有效,但现在图像或标签属性根本没有更新。即使在清洁产品操作之后。在这里提交了一个错误:bugreport.apple.com
删除应用程序后重新启动 iPhone 6s 完成了这项工作。在此之前,还检查了“清除图形上下文”下方的 NikLanf 解决方案。
这行得通。原因是我认为由于 .xcasset 在显示启动屏幕时尚未加载。如果您考虑一下,这就是launchscreen的用途- ios加载应用程序内容的等待时间,其中包括xcasset。我的猜测是把它放在外面工作,因为应用程序根文件夹中的所有内容都将首先加载。
m
mayankk2308

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

清理您的构建 (⌘+⇧+K) 关闭 Xcode 硬重置 iOS 设备(电源 + 主页按钮重新启动)重新启动 Xcode - 让索引完成并在设备准备好后构建。


拯救了我的一天!谢谢!
工作。我没有执行第 2 步和第 4 步,可能只需要对 iOS 设备进行硬重置,有人可以确认吗?
@TimothyL.J.Stewart 第 2 步和第 4 步只是我采取的更多预防措施,因为这个问题对我来说非常烦人 - 所以只是为了确定。我认为您说得对,因为它们实际上(通常)不会影响构建,因此它们可能是不必要的。
Xcode 8 Swift 3.0 关机或硬重置是唯一每次都有效的事情,并且每次添加新资产时都必须这样做。删除 DerivedData 不会。但是,图像在模拟器中正常工作。这浪费了我很多时间,谢谢@MayankKumar 的解决方案。
像魅力一样工作
C
Community

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

虽然这些答案对我们中的一些人有用,但这些工作的原因是因为应用程序被迫“重新拍摄”或“重建”缓存的快照。

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

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

背景

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

阅读@TimCamber 的this SO answer后,我无法弄清楚原因,这促使我做更多的研究和测试。

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

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

/Library/Caches/Snapshots/<>/ 和

/Library/Caches/Snapshots/<>/downscaled/。

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

解决方案

正如上面提到的@jaga的解决方案,实际上所有需要的是:

(老派)将图像文件 (.PNG) 添加到您的应用程序包中(从下面的屏幕截图中可以看到,我在 Images 子目录的 Supporting Files 子目录下添加了图像文件),并且

https://i.stack.imgur.com/1URfZ.png

在启动屏幕故事板文件中的 UIImageView 对象中引用该图像...

https://i.stack.imgur.com/rIXsn.png


谢谢我一直在努力解决这个问题。这对我行得通。
直接为我工作。这应该是正确的答案
启动时 IOS 无法编译资产,因此将您的图像放置到捆绑包中工作。谢谢。
迄今为止最好的答案。我要补充一点:图像必须在 app-bundle 的根目录中。否则,如果您将图像存储在子目录中,则必须提供完整路径“Media/launch_v1_200_mod.png”。
我也这样做了。我的应用程序已经上线,但问题是有时它正在显示图像,有时它在屏幕中间显示为白色的正方形
B
Bruce L

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


如果用户从 AppStore 更新应用程序会是什么样子?他需要重新启动他的设备吗?
K
Ke Yang

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

使用 .jpg 图像而不是 .png。我认为图像文件的大小很重要;

(可选)将图像文件放在项目目录而不是 .xcassets 中;


将图像文件放在 .xcassets 之外有助于
@Husam我真的认为文件大小才是最重要的。我有一个带有两个图像的启动屏幕:一个大的(400+KB .png)和一个徽标(10+KB .png,在 .xcassets 内)。徽标总是正常显示,但大的则不会。
你是对的..在我发表评论后,添加另一张图片后问题再次出现。谢谢你的帮助
然后按照您的指示使用 jpg 图像并工作
如果你需要透明度怎么办?
P
Petro Shm

对于从 TestFlight 安装的应用程序,我也有同样的情况。删除应用程序 -> 然后重新启动 iPhone -> 然后重新安装应用程序对我有用。只是重新安装应用程序或只是重新启动设备没有帮助。


这是唯一对我有用的东西——希望我在 90 分钟前看到这个!
希望我在 4 小时前看到这个
也为我工作,但问题很奇怪:|
a
andynil

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

https://i.stack.imgur.com/i1KmV.png


三年后,这就是为我解决的问题。现在是 Device > Erase All Content and Settings...
J
Jim Rhoades

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


J
Jakub Truhlář

您是否尝试过关闭设备并再次打开?去做吧。


T
Trinh Tran

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


这仅是因为您强制应用程序重新创建启动屏幕快照,但这不是问题的解决方案或原因。
m
midhun p

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


b
bonnie lapin

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


似乎对我也有帮助
g
guozqzzu

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

我通过以下方式修复它:

删除驱动器数据 清理项目 重新启动 Xcode 从我的设备中删除项目 重新启动 5s。

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


我不知道,但它的工作.. 喜欢的好。谢谢大佬分享。
o
oscar castellon

它对我有用。

首先在 xcode clean de 项目中。

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

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


S
Sunly

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


我尝试了上面所有的答案,但没有一个对我有用。但是这个答案解决了这个问题。
M
Manuel

重新启动 Xcode 为我做到了。

什么没有做到:

清理构建文件夹

重新启动设备或模拟器(图像在任何一个上都不可见)


A
Asha Antony

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

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


这也是我的问题。奇怪的是,它在某些设备上随机运行。 Xamarin-Project 与 Xcode 9.4 用于 XIB/Storyboard 编辑...
A
Amon Xu

这似乎是iOS的一个错误。就像有时系统动画消失了一样。

现在我只是重新启动 iPhone,它对我有用。


d
de.

在我的例子中,我是 图像名称
我将名为 Default-568h@2x.png 的图像添加到 LaunchScreen.xib - 我的旧启动屏幕之一,仅用于测试目的。我在 iPhone X 模拟器上构建,图像没有出现。

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

似乎 @2x-568h 都是问题的一部分。这在 -812h@3x 设备上是有意义的。


o
ostap_holub

我对 imageView 的启动屏幕故事板有同样的问题。我从项目中删除了图片的引用,我重命名了我的图像并将其再次添加到项目中。一切都完美无缺。


J
Jesse

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

它对我有用。


J
JamieDass

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


T
Tim Le

我也有同样的经历。我将图像分辨率从 300 像素/英寸更改为 72。它对我有用。


V
Vladimir Tolstikov

接下来对我有帮助:

将“启动屏幕文件”更改为另一个 xib

运行应用程序

将xib改回来

同样非常重要:检查您的 xib 是否未在另一个选项卡中打开,这也可能导致它!


F
Fox5150

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

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

2 - 产品 -> 清洁

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

- 保存并构建

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


S
SwiftDeveloper

这太重要必须Launch Screen File

https://i.stack.imgur.com/sptmP.png


他正在使用 XIB 故事板进行启动,这个答案不起作用。
A
Aproram

图像名称是问题。重命名启动屏幕故事板中使用的图像名称。确保不要使用除字母数字以外的任何字符(不要使用“_-&@”)像魅力一样为我工作。


z
zx485

解决了!

唯一对我有用的是从 LaunchScreen.storyboard 中删除 ViewController 并创建一个新的 ViewController 集以

是初始视图控制器

就那么简单 :)