更改UIDatePicker在深色模式下所选日期文本的颜色(iOS 13)

19

在iOS 13暗黑模式下,我无法找到更改所选日期文本颜色的解决方案。

我知道如何使用代码更改UIPicker视图的文本颜色。

self.timePicker.setValue(UIColor.black, forKeyPath: "textColor")

或者使用用户定义的运行时属性。但是在 iOS 13 暗黑模式下更改选定日期颜色没有任何效果。使用白色背景和黑色文本颜色,我的日期选择器看起来像这样:

进入图像描述

因此,将文本颜色更改为黑色不会更改所选日期的文本颜色。它会将所有其他文本颜色更改为黑色; 但不是所选的文本颜色。所选的文本保持为白色,这是暗黑模式的默认设置。


抱歉,我没明白。为什么要使用标签?我只是想改变颜色。我应该将颜色作为“textColor”键字段的值进行提及吗? - A K M Saleh Sultan
尝试一下我所说的。label 是一个颜色。 - rmaddy
不要在代码中更改颜色!将Interface Builder中的所有颜色设置为“默认”。 - vadian
问题在于,我们的应用程序背景颜色是深灰色。因此,如果我使用默认模式,它会将文本颜色变为白色,并具有清晰的背景。因此,我们希望在暗黑模式和正常模式下保持相同,即黑色文本颜色和白色背景。 - A K M Saleh Sultan
参考此链接 - https://dev59.com/Lrbna4cB1Zd3GeqPaGIR#57985965 - Pratik Sodha
显示剩余3条评论
4个回答

13

您可以在AppDelegate.m中设置self.window并覆盖界面样式,代码如下:

if (@available(iOS 13, *)) {
    self.window.overrideUserInterfaceStyle = UIUserInterfaceStyleLight;
}
return YES;

Swift 5.*

->

Swift 5.*

if #available(iOS 13.0, *) {
    self.window?.overrideUserInterfaceStyle = .light
}

这也会导致嵌入式地图使用浅色主题,而实际应该使用深色主题。 - craigpatik

11

我找到了一种解决问题的方法。如果将“hightlightsToday”颜色标记为false,则所选文本会显示为您设置的代码颜色。

self.datePicker.setValue(false, forKey: "highlightsToday")

但是,如果我想使用不同的颜色突出显示所选日期的文本颜色;在这种情况下,我不确定需要更改哪个键值。因此,我将保持问题开放,以防有人知道如何在深色模式下更改所选日期的文本颜色。


6

您可以通过Info.plist文件解决此问题。 在Info.plist文件中添加“UIUserInterfaceStyle”键和“Light”值。

<key>UIUserInterfaceStyle</key>
<string>Light</string>

参考:https://github.com/xgfe/react-native-datepicker/issues/365#issuecomment-532875809


这篇文章涉及到IT技术。它讨论了如何在React Native中使用日期选择器,并解决了iOS设备上的问题。如果您遇到类似问题,可以查看链接以获取更多信息。

3
您可以为UIDatePicker编写一个扩展,然后将datePicker文本的textColor设置为UIColor.label,它将根据界面模式(浅色/深色模式)动态更改。
extension UIDatePicker {

     var textColor: UIColor? {
         set {
              setValue(newValue, forKeyPath: "textColor")
             }
         get {
              return value(forKeyPath: "textColor") as? UIColor
             }
     }  

     var highlightsToday : Bool? {
         set {
              setValue(newValue, forKeyPath: "highlightsToday")
             }
         get {
              return value(forKey: "highlightsToday") as? Bool
             }
     }      
 }

完成上述步骤后,您可以像以下这样设置textColor的值:

  let datePicker = UIDatePicker()  
  datePicker.textColor = UIColor.label

对于Obj-C,这个方法适用于我: [self.datePicker setValue:[UIColor whiteColor] forKey:@"textColor"]; - Ken Roy

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