独立 App 适配深色模式(二):颜色、图片的适配

关于我:大厂摸鱼 + 业余独立开发,之后会输出深度技术文章 + 独立开发技巧

我的往期技术文章合集:RickeyBoy - Gitbub

我的独立开发 App:iColors - 设计灵感 配色助手

上一篇内容:独立 App 适配深色模式(一):如何进行调试

我们书接上文,第一步是进行颜色的适配。在上一篇文章中,我们已经设定好了一个 Color Set,预先定义了这个 Color 在深色模式、浅色模式不同情况下对应的显示情况。不过在讲解具体使用颜色之前,我们还要再讲解一个小问题:这个 Any Appearance 到底是什么?

Appearances 的三个模式

需要注意的是,这里默认的两个颜色分别叫做 Any Appearance 和 Dark。为什么不是 Light 和 Dark?因为其实除了 Light 和 Dark,其实还有一种情况,就是还有某些不支持深色模式的设备!

我们打开 Inspectors 看板,在里面找到 Appearances,就能发现玄机,其实他一共有三个模式:

  • None:只有一个颜色选项,不论什么情况下都用这个颜色
  • Any, Dark:两个颜色选项,Dark 代表深色模式下的颜色,Any 代表其他情况
  • Any, Light, Dark:三个颜色选项,Light 和 Dark 分别代表浅色模式和深色模式,Any 代表剩下的情况,也就是不支持深色模式的设备上采用的颜色!

使用颜色

为了方便的在 App 中使用预定义的、支持深色模式的 Color Set,我们只需要为 Color 新增一个拓展即可:

scss 复制代码
extension Color {
  static let ListBackground = Color("ListBackground")
}

这样我们就可以使用定义的背景颜色 ListBackground,像下面这样:

scss 复制代码
SomeView()
  .background(Color.ListBackground)

🌄 第二步:图片适配深色模式

在深色模式下,会有采用不同的颜色这一点很容易想到。其实除了颜色资源之外,我们还需要适配图片资源,在深色模式下使用不同的图片,会让 App 显得更有新意。

我们自然可以在页面布局的逻辑中,增加 if else 来设置不同的图片,但其实我们还有更好的方式。和 Color Set 类似,图片也可以通过预先定义的方式,来适配深色模式。

  1. 选中 Assets,点击 "+" 或者右键空白处,可以添加 Image Set
  2. 系统会默认创建一个图片,我们可以修改其名字
  3. 默认图片是只有一种样式,我们需要打开 Inspectors 看板,在里面找到 Appearances,将其修改为 "Any, Dark"

这样,我们就获得了 6 个格子,支持上传两张图片了。根据提示,放入对应的图片即可。比如下面 Any 中放入太阳图案,在浅色模式下会显示;Dark 中放入月球图案,在深色模式下会显示:

在代码中使用时无需考虑深浅色状态,直接像普通图片一样直接使用就行了,非常简单:

scss 复制代码
Image("name")

这一篇补充讲解了一下颜色、图片资源通过预定义的方式,来适配深色模式。当这两项内容完成之后,接下来我们就可以进行整体的配置了。

相关推荐
Anhty4 小时前
2026最新免费手机音频处理工具 !!
android·功能测试·ios·智能手机·音视频
2501_915909066 小时前
iOS应用从开发到上架App Store的完整发布流程与步骤指南
android·ios·小程序·https·uni-app·webview
初雪云7 小时前
UniApp 云打包拿到 IPA 后,真正的发布工作才刚开始
ios·自动化·编辑器·产品经理·iphone
Lancker9 小时前
没有 Mac 也能上架 iOS:GitHub Actions 全自动构建 + 签名 + TestFlight 送审实录
macos·ios·github
茶底世界之下9 小时前
晚霞要多暖?用 Awaking 只改色温做一次取舍
ios
酒神dnspup11 小时前
多地区网站可用性监控怎么做?DNSPup 从基线到告警的完整实战
运维·ios·云计算·iphone·dns·网络监控
福兮说1 天前
浏览器里把 iPhone 的 HEIC 转成 JPG:Chrome 解不开、转完大了七成、拍摄时间全丢,六个坑实测
前端·javascript·图像处理·chrome·ios·iphone·heic
茶底世界之下1 天前
时间线效果层,为什么不能只复用一个处理器?
ios·swift
ZZH_AI项目交付1 天前
实时字幕负责快,本地录音负责不丢:一个 iOS 录音功能为什么需要两条链路
ios·ai编程
Cc.Y1 天前
Swift深度链接的极简之道
ios·cocoa·swift