You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS 14+ UIDatePicker 文字颜色不生效及今日高亮设置崩溃问题

问题根因

你使用KVC修改textColor和highlightsToday的方案是旧版UIDatePicker(滚轮样式)的私有API实现,iOS 14推出.compact、.inline等新样式后,这些私有键已经不再被新样式支持,因此要么修改无效果,要么触发未识别selector崩溃。

修复方案

1. 文字颜色修改

iOS 15及以上系统无需依赖私有API,两种实现方式可选:

方式一:全局外观设置(适合所有UIDatePicker统一风格)

在App启动时或者当前页面加载时设置:

if #available(iOS 15.0, *) {
    UILabel.appearance(whenContainedInInstancesOf: [UIDatePicker.self]).textColor = .red
}

方式二:单个实例修改(避免影响其他日期选择器)

在日期选择器渲染完成后遍历子视图修改UILabel颜色,可放在UITableView的willDisplayCell代理方法中调用:

func setDatePickerTextColor(picker: UIDatePicker, color: UIColor) {
    for subview in picker.subviews {
        for innerSubview in subview.subviews {
            if let label = innerSubview as? UILabel {
                label.textColor = color
            }
        }
    }
}

如果你仍使用旧版滚轮样式,可保留原KVC写法,只要把样式设置代码放到最前面即可。

2. 今日高亮颜色修改+崩溃修复

highlightsToday私有键在iOS 13之后已被苹果移除,直接调用必然崩溃。新样式下今日日期的高亮颜色默认和UIDatePicker的tintColor一致,直接设置该属性即可:

dateTimePicker.tintColor = .yourCustomColor // 替换为你需要的高亮色

代码顺序调整

preferredDatePickerStyle需要放在所有属性设置的最前面,否则后续属性不会生效,修改后的完整代码如下:

func formatCell(checkInDate: Date) {
    // 第一步优先设置样式
    if #available(iOS 13.4, *) {
        dateTimePicker.preferredDatePickerStyle = .compact
    }
    
    // 设置文字颜色
    if #available(iOS 15.0, *) {
        UILabel.appearance(whenContainedInInstancesOf: [UIDatePicker.self]).textColor = .red
        dateTimePicker.tintColor = .systemBlue // 自定义今日高亮颜色
    } else {
        // 低版本兼容
        dateTimePicker.setValue(UIColor.red, forKeyPath: "textColor")
    }
    
    dateTimePicker.addTarget(self, action: #selector(handler(_:)), for: .valueChanged)
    dateTimePicker.date = checkInDate
    dateTimePicker.minuteInterval = 30
    dateTimePicker.datePickerMode = .dateAndTime
    dateTimePicker.minimumDate = Date().nearest30Mins()
 }

内容的提问来源于stack exchange,提问作者tech_human

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 03:45:04