在SwiftUI中打开暗模式时更改背景色
我已经在SwiftUI中创建了一个自定义工作表,背景颜色为白色在SwiftUI中打开暗模式时更改背景色,swiftui,Swiftui,我已经在SwiftUI中创建了一个自定义工作表,背景颜色为白色。背景(color.White) 现在,当用户在iOS上打开黑暗模式时,我希望背景颜色变为黑色。 但我找不到一种动态的背景颜色,比如color.primary用于文本的颜色等 那么,当黑暗模式打开时,有没有办法将背景颜色更改为黑色?将.background(color.white)更改为.background(color(UIColor.systemBackground))以下是可能的方法(适用于任何颜色) 为了详细说明这两个现有的答
。背景(color.White)
现在,当用户在iOS上打开黑暗模式时,我希望背景颜色变为黑色。
但我找不到一种动态的背景颜色,比如color.primary
用于文本的颜色等
那么,当黑暗模式打开时,有没有办法将背景颜色更改为黑色?将
.background(color.white)
更改为.background(color(UIColor.systemBackground))
以下是可能的方法(适用于任何颜色)
为了详细说明这两个现有的答案,有两种方法可以根据您想要实现的目标,根据明暗模式(又名
colorScheme
)改变背景
如果您将背景色设置为白色,因为这是默认的背景色,并且希望系统能够在用户切换到暗模式时更新背景色,请将.background(color.white)
更改为.background(color(UIColor.systemBackground))
(umayanga的回答)
e、 g
如果要根据设备处于亮模式或暗模式自定义视图的颜色,可以执行此操作(来自Asperi的回答):
请注意,许多SwiftUI视图在默认情况下将其背景色设置为
.systemBackground
,因此,如果您使用的是滚动视图、列表、表单等,它们将使用默认的系统背景色,并且您无需使用.background
,除非您想要自定义它。您可以扩展UIColor,如下所示
extension UIColor{
struct Custom {
static var black: UIColor{
if #available(iOS 13, *) {
return UIColor.init { (trait) -> UIColor in
return trait.userInterfaceStyle == .dark ? UIColor.white : UIColor.black
}
}
return UIColor.black
}
}
}
然后用作.background(颜色(UIColor.Custom.black))
当启用/禁用暗移时,视图将更新颜色如果您想要直接从
颜色
(就像您使用color.primary
)工作的内容,并且iOS和macOS上的功能(UIColor
在macOS上不起作用),您可以使用以下简单的颜色
扩展,它使用条件编译在任一操作系统上正常工作
然后,您只需像任何其他SwiftUIColor
一样,从代码中的其他地方访问它们。例如:
let backgroundColor = Color.background
使用这种方法,无需检查colorScheme
或userInterfaceStyle
:当用户在明暗模式之间移动时,操作系统将自动切换
我还包括了“二级”和“三级”颜色,这在macOS上有点主观,但如果需要,您可以随时将它们更改为其他一些NSColor
属性
Swift v5.2:
import SwiftUI
public extension Color {
#if os(macOS)
static let background = Color(NSColor.windowBackgroundColor)
static let secondaryBackground = Color(NSColor.underPageBackgroundColor)
static let tertiaryBackground = Color(NSColor.controlBackgroundColor)
#else
static let background = Color(UIColor.systemBackground)
static let secondaryBackground = Color(UIColor.secondarySystemBackground)
static let tertiaryBackground = Color(UIColor.tertiarySystemBackground)
#endif
}
如果您希望在明暗模式下使用自定义背景色,我建议您在资源文件夹中创建新的颜色集,为不同的外观使用自定义颜色值 这样,在切换显示模式时,背景颜色将自动改变,而无需添加一行代码 然后使用颜色列表中的此颜色作为控制器视图背景
我们还可以通过将它们添加到
资产
文件夹来自动更改颜色
Assets
文件夹中添加新颜色集
任何外观
、深色外观
、浅色外观
配置颜色。
color
Color("your_color_set_name")
extension Color {
static var tableViewBackground: Color {
Color("tableViewBackground")
}
}
我个人不喜欢在
Assets
文件夹中创建颜色集
我更喜欢将其包含在代码中,因此这方面的最佳实践如下:
extension Color {
static var primaryColor: Color {
Color(UIColor { $0.userInterfaceStyle == .dark ? UIColor(red: 255, green: 255, blue: 255, alpha: 1) : UIColor(red: 200, green: 200, blue: 200, alpha: 1) })
}
}
使用:
.background(Color.primaryColor)
SwiftUI具有自动适应配色方案的颜色。例如,您可以使用
.background(Color(.textBackgroundColor))
为呈现文本获取合适的背景色,而不考虑颜色方案。查看此页面,了解各种UI元素的推荐系统颜色。使用这些应注意暗/光模式切换
.systemBackground在亮模式下为白色,但在暗模式下为灰色。但对于iOS 14小部件,暗模式的默认背景为纯黑色。@暗模式的myatmins systemBackground为纯黑色。但如果视图位于图纸上,则为灰色(systemGray6)
extension Color {
static var tableViewBackground: Color {
Color("tableViewBackground")
}
}
extension Color {
static var primaryColor: Color {
Color(UIColor { $0.userInterfaceStyle == .dark ? UIColor(red: 255, green: 255, blue: 255, alpha: 1) : UIColor(red: 200, green: 200, blue: 200, alpha: 1) })
}
}
.background(Color.primaryColor)