【问题标题】:List with system background color gets messed up in dark mode具有系统背景颜色的列表在暗模式下变得混乱
【发布时间】:2019-10-15 23:38:34
【问题描述】:

我正在尝试为将适应 iOS 模式(浅色/深色)的列表设置背景颜色。 我在 VStacks 中使用 .systemGray5 没有问题,但是在列表中使用它并更改为暗模式时,我得到一个非常暗,几乎是黑色的颜色,这使得一切都难以理解。

无论列表是动态的还是静态的,都会发生这种情况。这是一个错误吗?还是有其他方法可以做到这一点?

    List {
        Text("Privacy").foregroundColor(Color(.systemRed))
    }.colorMultiply(Color(.systemGray5))

【问题讨论】:

    标签: ios swiftui ios-darkmode swiftui-list


    【解决方案1】:

    问题在于colorMultiply 会将列表中的所有颜色(文本、背景、分隔符)与给定颜色相乘(参见multiply color blending)。这将使整个视图变暗,这在浅色模式下可能看起来不错,但与您在深色模式下想要做的相反。

    有两种方法可以改变 List 中的背景颜色:

    List {
        Text("Privacy").foregroundColor(Color(.systemRed))
            .listRowBackground(Color(.systemGray5))
    }
    .background(Color(.systemGray5))
    

    background 会改变整个列表的背景,但我猜这只有在分组列表中才真正可见,因为单元格之间通常没有任何空格。

    listRowBackground 在 List 环境中使用时更改视图的背景颜色。这可能就是你想在这里使用的。

    【讨论】:

    • 好的,所以这有助于静态列表,但动态列表仍然不应用系统灰色。一旦我写了这样的东西:List(pumpData) { pump in 列表不应用灰色
    • 您是否将listRowBackground 应用于您在内部 List() { ... } 块中创建的视图?
    • 这是我的非工作代码:List(pumpData) { pump in Text("pump").listRowBackground(Color(.systemGray5)) }.background(Color(.systemGray5))
    • 我为这个看似错误的解决方法提供了另一个答案..
    【解决方案2】:

    Frank Schlegel 提供了一个仅适用于静态列表的答案。在 Apple 为动态列表修复此问题之前,我使用此代码解决了我的问题

    List {
        ForEach(pumpData) { pump in
            Text("pump").listRowBackground(Color(.systemGray5))
            }
        }.background(Color(.systemGray5))
    

    【讨论】:

      【解决方案3】:

      .secondarySystemGroupedBackground 为我工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-04
        • 2021-10-06
        • 1970-01-01
        • 1970-01-01
        • 2021-09-18
        • 2023-03-02
        • 2020-04-28
        • 1970-01-01
        相关资源
        最近更新 更多