如何在SwiftUI中更改DatePicker的文本颜色?

10

我看到了这个问题,但在SwiftUI中不起作用。

更改日期选择器的文本颜色

我尝试使用.forgroundColor.accentColor,但它们不会改变文本的颜色。

7个回答

15

使用 .colorInvert().colorMultiply(.white) 可以将文本颜色更改为白色,但在设备处于黑暗模式时不起作用。尝试使用以下方法:


DatePicker("Date", selection: $selection)
    .colorScheme(.dark) // or .light to get black text

1
这是目前最好的答案,但希望苹果未来能够为我们提供更改文本颜色的方法。 - Adelmaer

13

我只是简单地设置了accentColor,它就起作用了。

@State private var date = Date()
DatePicker("Select a date",
           selection: $date, in: ...Date(), 
           displayedComponents: .date)
        .labelsHidden()
        .accentColor(.orange)

这应该是被接受的答案-与已被接受的答案重复的帖子-https://dev59.com/ZL7pa4cB1Zd3GeqPsijy#64823381 - Michael Ellis
5
.compact日期选择器样式中,当活动状态时会显示此强调色,但在控件被点击之前文本是黑色的。 - pkamb
2
这不应该是被接受的答案。这只会给强调的按钮(如<>箭头和选定日期)上色,其他所有内容都不受影响。 - William T.

9

尝试这个:

var body: some View {
    Group {
        
        DatePicker(selection: $selected) {
            Text("Date")
        }
    
    .colorInvert()
        .colorMultiply(Color.blue)
    }
}

enter image description here


请注意,这可能会更改某些控件的功能。尝试在切换按钮上应用相同的技术,但它停止工作... - user3441734
2
@UserWithWeiredNumber。没有人说它适用于所有控件。没有人说 - 每个开发者都知道 - 苹果可能会改变一些东西,然后我们也必须改变一些东西。但有些人只看到“担忧”。他要求更改日期选择器的颜色 - 他现在就在寻找解决方案 - 而不是在100年后。这就是我的解决方案所提供的。没有多余,也没有少了。 - Chris
我已经将您的回答评为有价值的 :-),但通知其他人仍然是一个好主意。特别是因为 Toggle 可能会深入您的 UI 中。您可以自己尝试一下...被警告总比没有好。 - user3441734
我看不到是谁标记了我的答案... ;) - Chris

5

如果您使用背景颜色,您可以通过以下方式在浅色或深色模式下使文本显示为白色。

struct PickerDate: View {
    @Environment(\.colorScheme) var colorScheme
    @State var date: Date
    var body: some View {
        VStack {
            DatePicker("Record Date", selection: $date, in: ...Date(), displayedComponents: .date)
                .labelsHidden()
                .colorMultiply(colorScheme == .dark ? .black : .white)
                .colorInvert()
            }
        }
    }
}

3

我使用扩展程序来为亮色模式和暗色模式下的文本自定义颜色。

extension View {
    @ViewBuilder func changeTextColor(_ color: Color) -> some View {
        if UITraitCollection.current.userInterfaceStyle == .light {
            self.colorInvert().colorMultiply(color)
        } else {
            self.colorMultiply(color)
        }
    }
}

以下是示例。

DatePicker("Date", selection: $selection)
    .labelsHidden()
    .changeTextColor(.green)

请注意,如果使用preferredColorScheme修改视图,则userInterfaceStyle不会更改,因此可能需要使用环境中的值。 - CMash

2
我发现将这个修饰符应用于DatePicker更加简洁:
强制颜色为白色。
 .environment(\.colorScheme, .dark)

强制将颜色设置为暗色。
 .environment(\.colorScheme, .light)

0
DatePicker("DatePicker", selection: self.$date, displayedComponents: .hourAndMinute)
              .labelsHidden()
              .colorMultiply(Color.white)
              .colorInvert()

4
回复评论:你好,请不要仅仅给出代码,尽量提供关于你解决方案的详细描述。请参考:如何撰写一个好的答案。谢谢。 - sɐunıɔןɐqɐp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接