iOS14 - 如何在 UIKit 中更改 UIDatePicker 的文本颜色?

iOS14 - How to change textColor of UIDatePicker in UIKit?

使用 iOS14.0.1, Swift5.3, Xcode12.0.1,

我尝试在 iOS14 中更改 UIDatePickertextColor 并使用 UIKit。

我读到 here 您需要使用以下方法:

let myDatePicker = UIDatePicker()
myDatePicker.tintColor = .white

我还尝试了以下方法(但这会使我的应用程序在 iOS14 下崩溃):

myDatePicker.setValue(UIColor.white, forKeyPath: "textColor")

我也试过了(也没有成功):

UILabel.appearance(whenContainedInInstancesOf: [UIDatePicker.self]).textColor = UIColor.white

在轻量级模式下,我的 none 试验有效(从截图摘录中可以看出):

我需要做什么才能在 UIDatePicker 中获得白色文本?

我使用 pickerView delegate 方法更改选择器视图颜色。您可以通过添加以下委托方法来添加此功能:UIPickerViewDelegate, UIPickerViewDataSource

    func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {

      // change your picker view textColor etc. in here..
}

试试这个,添加下面的扩展名:

extension UIDatePicker {

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

现在在 viewDidLoad 调用中:

myDatePicker.textColor = .yourColor

在其他选择器 属性 之后调用它,即:

myDatePicker.preferredDatePickerStyle = .wheels
myDatePicker.addTarget(self, action: #selector(handleDatePicker), for: .valueChanged)
myDatePicker.datePickerMode = .dateAndTime
myDatePicker.timeZone = NSTimeZone.local
myDatePicker.backgroundColor = .black
myDatePicker.setValue(false, forKey: "highlightsToday")
myDatePicker.textColor = .yourColor // here

如果你想要 highlightsToday 将相对选择器值设置为 true:

myDatePicker.setValue(true, forKey: "highlightsToday")

这是结果:

是的,它有效!但是,属性 preferredDatePickerStyle = .wheels 必须在 textColor = .yourColor 之前设置,否则属性 textColor 可能永远不会受到影响。