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

Posted

技术标签:

【中文标题】为深色模式更改 UIDatePicker 选定的日期文本颜色(iOS 13)【英文标题】:Change UIDatePicker selected Date text Color for Dark mode (iOS 13) 【发布时间】:2020-01-25 00:47:08 【问题描述】:

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

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

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

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

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

【问题讨论】:

使用UIColor.label,而不是UIColor.black 抱歉没听懂。为什么要使用标签?我正在改变颜色。我应该将颜色作为关键字段“textColor”的值吗? 试试我说的。 label 是一种颜色。 不要更改代码中的颜色!将 Interface Builder 中的所有颜色设置为 default 嗯,问题是,我们的应用背景颜色是深灰色。所以我使用默认模式,它将文本颜色变为白色,背景清晰。因此,我们希望在深色模式和普通模式下保持相同,即黑色文本颜色和白色背景。 【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

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

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

return YES;

斯威夫特 5.*

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

【讨论】:

这也使得嵌入式地图在应该使用深色方案时使用浅色方案。【参考方案3】:

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

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

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

【讨论】:

【参考方案4】:

你可以为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"];

以上是关于为深色模式更改 UIDatePicker 选定的日期文本颜色(iOS 13)的主要内容,如果未能解决你的问题,请参考以下文章

根据深色模式更改的默认背景颜色 res 是啥? [安卓]

Flutter-如何在深色模式下更改状态栏文字颜色?

Flutter 深色(暗黑)模式下 状态栏字体颜色为白色

在 iOS 13 中更改主题时边框颜色不会改变

iOS9中的UIDatePicker问题

如何修复 Eclipse 深色主题中选定文本项的黑色前景色