我可以在 SwiftUI 深色模式下覆盖黑色背景颜色吗?

Posted

技术标签:

【中文标题】我可以在 SwiftUI 深色模式下覆盖黑色背景颜色吗?【英文标题】:Can I override the black background color in SwiftUI dark mode? 【发布时间】:2021-09-04 20:38:16 【问题描述】:

我正在尝试在 SwiftUI 暗模式下全局(应用程序范围)更改黑色背景颜色,但我找不到这样做的方法,.background(View) 修改后仅更改它应用的视图的背景to,这不是我要找的!

我尝试覆盖UIColor.systemBackground,但实际上似乎没有任何效果!

编辑:这是我现在拥有的和正在寻找的东西的屏幕截图!

【问题讨论】:

只需制作自己的颜色集,然后用它代替UIColor.systemBackground 只是每个屏幕的背景颜色,还是每个视图的背景颜色? @George 我猜的每一个观点!我的意思是屏幕、列表、导航栏等...基本上每个默认使用UIColor.systemBackground 的视图。 @AhmedKamal 明暗模式配色方案,还是自定义?例如,您可以使用 .environment(\.colorScheme, .light) 强制使用配色方案 @George 不,我不是要更改配色方案,而是要在深色方案中覆盖黑色背景,例如,使用深蓝色背景而不是黑色背景,但是应用范围内,我不想单独为每个视图设置背景! 【参考方案1】:

好吧,我想出了如何达到预期的结果,这就是我所做的。

    使用所需的背景颜色创建颜色集。 创建一个易于使用的颜色扩展。
extension Color 
    static let systemBackground = Color("Background")

    在您的ContentView
init() 
    UINavigationBar.appearance().backgroundColor = UIColor(Color.systemBackground)
    UITableView.appearance().backgroundColor = UIColor(Color.systemBackground)
    UITableViewCell.appearance().backgroundColor = UIColor(Color.systemBackground)


var body: some View 
    ZStack 
        Color.systemBackground
            .edgesIgnoringSafeArea(.vertical)

        MyContent()    
    

    然后如果MyContentList
struct MyContent: View 
    var body: some View 
        List 
            ForEach(items) 
                ItemRow($0)
            
            .listRowBackground(Color.systemBackground)
        
    

请注意,修改后的.listRowBackground 应用于ForEach,而不是List

    最后,如果MyContentScrollView 或任何其他自定义视图,您可以简单地使用修改后的background

这是最终结果。


正如@swiftpunk 在他的回答中提到的那样,我希望覆盖UIColor.systemBackground,所有视图都会自动选择新颜色,但结果证明它根本没有任何效果。 ?‍♂️

【讨论】:

但是你没有回答问题!您只是将 UI 的背景颜色更改为其他内容!这不是一个有效的答案!

以上是关于我可以在 SwiftUI 深色模式下覆盖黑色背景颜色吗?的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI 2.0如何更改表单部分的背景颜色[重复]

深色背景下难以阅读的推送通知

iPhone微信深色模式微信字体怎么看不见了?

iOS 13 窗口背景颜色

SwiftUI 深色模式不适用于工作表

我可以将样式 html 内容放在 Gmail 签名上吗?