iOS 13 中的暗模式启动屏幕

Posted

技术标签:

【中文标题】iOS 13 中的暗模式启动屏幕【英文标题】:Dark mode launch screen in iOS 13 【发布时间】:2019-11-15 10:31:18 【问题描述】:

我已将我的 ios 应用更新为在 iOS 13 上以暗模式运行,但我无法让启动屏幕看起来不错。

目前它是一个带有应用程序徽标的亮白色屏幕,在黑暗模式下看起来很糟糕。我尝试将启动屏幕的背景颜色设置为我制作的颜色资产,其中“任何外观”为白色,“深色外观”为黑色 - 但启动屏幕仍始终显示为白色。

有什么方法可以让我的启动屏幕在黑暗模式下正常工作?

【问题讨论】:

使用systemBackgroundColor 作为背景颜色。无需您自己的颜色资产。 成功了!如果您想将其发布为答案,我可以接受。 @rmaddy 你知道这是否会使 iOS 12 及更低版本的应用程序崩溃? @IvanIčin 它不应该崩溃。如果您支持 iOS 12 或更低版本,Xcode 似乎会在情节提要中设置等效的灯光模式颜色。试试看,然后确定。 【参考方案1】:

设置启动屏幕故事板时,将视图“背景”颜色设置为“系统背景颜色”。这将在亮模式下为白色,在暗模式下为黑色。无需使用您自己的颜色资源。

【讨论】:

但是,如果我想在系统浅色模式下将用户界面样式覆盖为深色,或者在系统处于深色模式时将其覆盖为浅色。我该如何实施?故事板将始终遵循系统背景颜色,因此不会流畅。 实际上我知道,并且我已经成功地以编程方式进行了更改。问题的关键是我想为LaunchScreen 更改它,如本主题中所述。例如,当系统黑暗时,我可以将当​​前窗口覆盖为亮,但 LaunchScreen 仍然保持黑暗。 这不太好,我的应用使用彩色背景作为亮色,黑色作为暗色模式。 也称为颜色仅在 iOS 11 之前可用。 在我看来,假设启动屏幕只能是白色或黑色不是正确的方法。我已经通过对背景和徽标使用动态图像资源解决了我的问题。【参考方案2】:

我找到了一个解决方案,它支持早期的 iO​​S 版本以及 iOS 13 中每种模式(深色和浅色)的自定义颜色。

    创建图像资源,将外观设置为任意、浅色、深色,然后加载具有所需颜色的小实心 png。在这种情况下,我使用橙色表示浅色,黑色表示深色。

    转到您的 LanuchScreen.storyboard 并使用该图像资产添加图像视图。将图像放在图像徽标后面,将内容模式设置为 Aspect Fill,并将视图限制在所有侧面的 Superview 上。 (确保您的徽标在两种背景下看起来都很好,或者也设置它的外观)

    这是我不得不做的一个技巧。由于某种原因,我无法显示背面图像。在检查了Launch Screen storyboard not displaying image 中的一些 cmets 后,我将图像资源中的第一个图像添加到目标包中

在旧版本的 iOS 中颜色是静态的,它适用于 iOS 13 中的深色和浅色模式。

【讨论】:

谢谢!这实际上是我的情况的最佳解决方案。我支持比 iOS11 更旧的版本,而且我还有自定义背景颜色。 谢谢。重新启动我的模拟器修复了.. LaunchScreen 没有显示任何图像的错误。 谢谢!我按照您的所有步骤操作,最后我重新启动了我的模拟器,然后它就可以工作了。【参考方案3】:

我正在更新我的应用程序以支持 iOS 13 的新暗模式,我在 LanuchScreen.storyboard 中为视图的背景添加了“系统背景颜色”,但令人惊讶的是没用!

页面上的徽标图像根据亮/暗模式正确更改,但不是背景!

我正准备应用 Jose 的解决方案,但在此之前,我决定从我的设备中完全删除该应用并重试。它奏效了!!

【讨论】:

【参考方案4】:

我在 Xcode 默认提供的颜色中缺少我的调色板中的颜色,因此我使用 Color.xcassets 创建了我自己的颜色,在那里我创建了带有外观 Any, Dark 的自定义颜色集并设置了我的颜色。

然后我可以在自动布局中使用它们,就像在 LaunchScreen 中一样使用系统颜色

【讨论】:

请注意,只有 iOS 11.0 支持名称颜色属性 对于较低的版本,使用 UIImageView 和 1px 图像作为深色和浅色样式。 这些图像是 jpg 还是 png,而不是实际的 UIColors?编辑:没关系,我看到您可以在 xcassets 中添加颜色集。 注意:我必须完全重启我的设备才能生效!【参考方案5】:

是的,启动屏幕在暗模式下工作,首先检查“xyz”图像的背景颜色。如果可以的话。只需从设备或模拟器中删除您的应用程序,因为有时设备或模拟器会缓存启动屏幕,您将无法在其上获得更新 UI。如果您将面临同样的问题,请按照我的演示应用程序 github.com/Indolia/darkmode.git

【讨论】:

如果不重新启动模拟器,其他答案均无效。谢谢。 对我来说也一样,删除应用程序没有做任何事情,但重新启动模拟器有效。 我刚刚在一个新的模拟器上运行了这个应用程序,一切都像一个魅力!谢谢。

以上是关于iOS 13 中的暗模式启动屏幕的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 11 -- SwiftUI 的暗模式设置

多项活动中的暗模式

以编程方式检测 SwiftUI 中的暗模式以显示适当的图像

从手机本身设置的暗模式下的离子电容器 QR 扫描仪黑屏

在 Android Studio 中以编程方式从应用程序触发系统的暗模式

如何检查 iOS/iPadOS 中是不是启用了深色模式?