您如何允许用户在 iOS 打开应用程序时更改为深色或浅色模式?
How can you allow for a user changing to dark or light mode with the app open on iOS?
我更新了应用中的视图以通过添加
支持深色模式
if #available(iOS 12.0, *) {
if self.traitCollection.userInterfaceStyle == .dark {
//Adapt to dark Bg
} else {
//Adapt to light Bg
}
}
然后,为了允许用户在切换模式后将应用程序设置为后台并returns到它的情况,我在我的 viewDidLoad
中附加了一个观察者
if #available(iOS 12.0, *) {
NotificationCenter.default.addObserver(self, selector: #selector(willEnterForeground), name: UIApplication.willEnterForegroundNotification, object: nil)
} else {
// Fallback on earlier versions
}
触发函数
@available(iOS 12.0, *)
@objc func willEnterForeground() {
if self.traitCollection.userInterfaceStyle == .dark {
print("App moving to foreground - dark")
//Adapt to dark Bg
} else {
print("App moving to foreground - light")
//Adapt to light Bg
}
}
但是,self.traitCollection.userInterfaceStyle
仍然提供旧值,因此需要完全重新加载视图才能对界面产生所需的更新。
使用 UIApplication.didBecomeActiveNotification
没有区别。
您不需要所有那些混乱的 if 语句!只需将您的颜色添加到资产目录中,系统就会自动 select 编辑正确的颜色。这与添加 x1
、x2
和 x3
图像的方式类似,正确的图像将被 selected。
转到资产目录,然后单击左下角的加号按钮,select "New Color Set":
给颜色命名,然后在 属性 检查器中,将 "Appearance" 设置为 "Any, Dark":
为每种外观选择一种颜色:
最后,使用 UIColor(named:)
初始化程序初始化颜色,当设备的暗模式设置更改时它们会自动更改:
someView.backgroundColor = UIColor(named: "myColor")
编辑:
如果颜色仅在运行时已知,您可以使用 init(dynamicProvider:)
初始化器(iOS 13 仅):
someView.backgroundColor = UIColor {
traits in
if traits.userInterfaceStyle == .dark {
// return color for dark mode
} else {
// return color for light mode
}
}
我更新了应用中的视图以通过添加
支持深色模式 if #available(iOS 12.0, *) {
if self.traitCollection.userInterfaceStyle == .dark {
//Adapt to dark Bg
} else {
//Adapt to light Bg
}
}
然后,为了允许用户在切换模式后将应用程序设置为后台并returns到它的情况,我在我的 viewDidLoad
中附加了一个观察者 if #available(iOS 12.0, *) {
NotificationCenter.default.addObserver(self, selector: #selector(willEnterForeground), name: UIApplication.willEnterForegroundNotification, object: nil)
} else {
// Fallback on earlier versions
}
触发函数
@available(iOS 12.0, *)
@objc func willEnterForeground() {
if self.traitCollection.userInterfaceStyle == .dark {
print("App moving to foreground - dark")
//Adapt to dark Bg
} else {
print("App moving to foreground - light")
//Adapt to light Bg
}
}
但是,self.traitCollection.userInterfaceStyle
仍然提供旧值,因此需要完全重新加载视图才能对界面产生所需的更新。
使用 UIApplication.didBecomeActiveNotification
没有区别。
您不需要所有那些混乱的 if 语句!只需将您的颜色添加到资产目录中,系统就会自动 select 编辑正确的颜色。这与添加 x1
、x2
和 x3
图像的方式类似,正确的图像将被 selected。
转到资产目录,然后单击左下角的加号按钮,select "New Color Set":
给颜色命名,然后在 属性 检查器中,将 "Appearance" 设置为 "Any, Dark":
为每种外观选择一种颜色:
最后,使用 UIColor(named:)
初始化程序初始化颜色,当设备的暗模式设置更改时它们会自动更改:
someView.backgroundColor = UIColor(named: "myColor")
编辑:
如果颜色仅在运行时已知,您可以使用 init(dynamicProvider:)
初始化器(iOS 13 仅):
someView.backgroundColor = UIColor {
traits in
if traits.userInterfaceStyle == .dark {
// return color for dark mode
} else {
// return color for light mode
}
}