更改 UIDatePicker 选定的日期文本颜色以用于深色模式 (iOS 13)

Change UIDatePicker selected Date text Color for Dark mode (iOS 13)

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

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

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

或使用用户定义的运行时属性。但是没有任何方法可以更改 iOS 13 深色模式的选定日期颜色。使用白色背景和黑色文本颜色,我的日期选择器视图如下所示:

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

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

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

但是如果我想用不同的颜色突出显示我选择的日期文本颜色;在那种情况下,我不确定我必须更改哪个键值。所以我打算留下这个问题,以防有人知道如何更改暗模式的选定日期文本颜色。

您可以在 AppDelegate.m 中设置 self.window 并像这样覆盖界面样式

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

Swift5.*

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

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

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

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

可以给UIDatePicker写一个扩展,然后设置datePicker文本的textColor为UIColor.label,会根据界面模式动态变化(light/dark模式)

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