Ios 在不使用设备设置的情况下,将应用程序设置为亮/暗模式
我正在开发一个iOS应用程序,在应用程序的设置范围内,我将允许用户使用明暗模式。默认情况下,该应用程序将是浅模式,但如果用户将其更改为暗模式,它将更改标签/背景/按钮等 我计划通过在共享默认值中存储亮模式或暗模式来实现这一点,当页面加载时,我将检查这一点 如果是暗模式,我知道我可以在ViewDidLoad()中根据需要更改颜色,但这似乎太多工作了。我这里有我需要的一套颜色: 我知道如果我愿意,我可以将标签设置为这种特定的颜色 但我相信这是由设备级暗/光模式设置控制的。如果有办法我可以创建一个模板来控制颜色?我相信我可以创建一个功能来调整所有东西的颜色,但是必须为所有东西创建一个插座,这会让人感到困惑Ios 在不使用设备设置的情况下,将应用程序设置为亮/暗模式,ios,swift,Ios,Swift,我正在开发一个iOS应用程序,在应用程序的设置范围内,我将允许用户使用明暗模式。默认情况下,该应用程序将是浅模式,但如果用户将其更改为暗模式,它将更改标签/背景/按钮等 我计划通过在共享默认值中存储亮模式或暗模式来实现这一点,当页面加载时,我将检查这一点 如果是暗模式,我知道我可以在ViewDidLoad()中根据需要更改颜色,但这似乎太多工作了。我这里有我需要的一套颜色: 我知道如果我愿意,我可以将标签设置为这种特定的颜色 但我相信这是由设备级暗/光模式设置控制的。如果有办法我可以创建一个
有什么建议吗?我在iOS-13之前构建了一个明暗模式的应用程序,下面是我们使用的
- 添加成吨的插座并手动设置代码中的所有颜色。需要大量的工作,容易错过一些东西
- 使用代理更改默认UI元素的颜色。通常会产生意料之外的副作用,需要大量的手动测试来解决这些问题
这两种选择都不是很好。但是,如果最低iOS版本为13或更高,更好的选择是使用自适应颜色和语义颜色添加本机暗模式支持。然后,您应该能够在应用程序中添加一个UI控件,该控件可以按每个视图或每个视图控制器进行设置。我认为您应该只更改存储在UserDefaults或其他地方的全局变量。并在assets.xdassets中设置所有颜色。在那里你把颜色设置为亮模式和暗模式。但正如我所知,没有办法系统地改变应用程序的外观(就像iOS所做的那样)。也许你可以试试RXSwift),它是反应式编程。继续。暗模式有很多选项,管理这些选项的代码可能会非常复杂且容易出错,因此我们决定看看用户需要/想要什么,然后选择最自然(代码密集度较低)的方法来支持暗模式 我们决定让我们的应用程序遵循以下原则:
override func viewDidLoad() {
super.viewDidLoad()
// get the user option and set the relevant mode
if Options.userDarkModeOption == .dark {
overrideUserInterfaceStyle = .dark
} else {
overrideUserInterfaceStyle = .light
}
}
这就是如何在明暗模式下管理颜色的方法
这是否回答了您的问题?使用选项1,如果我在应用程序的设置中有一个开关控件,例如,如果用户选择了暗模式,我将重新加载设置页面,然后我可以对If statemnt执行相同的概念,并像您在这里一样更改overrideUserInterfaceStyle程序。只要我设置标签colors等,使用我在资产目录中的正确颜色,对吗?对。每个页面/视图都可以被覆盖。那太好了。谢谢。
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
// Update user interface if changes to Dark Mode detected.
MasterTable.reloadData()
switch traitCollection.userInterfaceStyle {
case .dark :
cell?.contentView.backgroundColor = = UIColor(red: 0.95, green: 0.95, blue: 0.95, alpha: 1)
case .light :
cell?.contentView.backgroundColor = UIColor.systemTeal
case .unspecified :
cell?.contentView.backgroundColor = UIColor.systemOrange
@unknown default:
print("Error: Unknown userInterFaceStyle in masterVC/cellforitem")
}