swift - Swift/SwiftUI 中除深色模式和浅色模式之外的其他 ColorScheme
问题描述
我正在开发一个通常会在黑暗环境中使用的应用程序,并且显示器的光输出应该减少到最低限度。所以我想要一个低对比度的黑色背景和灰色文本。如果有人在另一个环境中使用该应用程序,用户可能会考虑使用具有更高对比度的常规视图 - 例如通常的暗模式或亮模式。当然,我可以将所有background
s 设置为黑色,foregroundColor
将 s 设置为灰色,但这需要大量代码才能让用户有可能返回到通常的亮/暗模式。我的方法是写一个extension
to ColorScheme
,从
public extension ColorScheme {
static let evenDarker = ColorScheme.dark
}
并从那里调整颜色值。在我的想象中,这应该创建了.dark
. 我可以打电话
let contentView = ContentView()
.environment(\.colorScheme, .evenDarker)
它的构建没有问题,不幸的是它确实显示了系统设置(如设备上定义的那样)而不是暗模式的副本。.dark
但是,使用或.light
覆盖系统设置调用相同的视图。
此外,我在 ColorScheme 中找不到任何可能值的列表或文档 - 例如如何将默认背景颜色从灰色覆盖为黑色。有没有人得到这个或类似的东西开始工作?
解决方案
与此同时,我找到了一个适用于第一个问题的解决方案:Working with
public extension UIUserInterfaceStyle {
static let evenDarker = UIUserInterfaceStyle.dark }
和
window.overrideUserInterfaceStyle = .evenDarker
效果更好,它复制.dark
到.evenDarker
- 并且与使用 ContentView() 的环境设置不同,它还有一个选项可以使用.unspecified
- 如果用户想要使用系统设置。
推荐阅读
- c# - 如何在 Winform 应用程序控制台应用程序或 C# 中的任何类方法中使用动作过滤器
- powershell - Get-MailboxFolderStatistics 输出文件仅显示数字
- r - 在 R,factoectra 中,如何解释 CA 的结果(对应分析)
- spring - crud 编辑器中的 Vaadin 上传组件
- xml - SOAP 请求中状态码为 500 的内部服务器错误
- mysql - 如何检查数据库中是否存在记录..如果它存在只是增加数量(laravel)?
- if-statement - if-then-else 语句的语法错误?
- git - git sparse-checkout 的奇怪行为
- mysql - SQL:更新表中百万条记录的最快方法是什么(只需要更新 ID 列值)
- azure-devops - 在 Azure DevOps 中发布 Nunit 控制台测试的测试全名