如何在UIDatePicker中仅显示年月日(不含时分及上下午)
实现UIDatePicker仅显示年-月-日的可行方案
当然有办法搞定!而且根据你适配的iOS版本,有两种清晰的实现路径,我给你拆解清楚:
一、iOS 14及以上:推荐简洁方案
iOS14之后苹果给UIDatePicker加了更灵活的配置项,不仅能轻松隐藏时分和AM/PM,还能自定义显示格式:
- 核心设置:把
datePickerMode设为.date(Swift)或UIDatePickerModeDate(Objective-C),这一步直接让Picker只展示年月日,完全屏蔽时分、AM/PM元素。 - 自定义格式(可选):如果需要固定显示类似
yyyy-MM-dd的格式(不管系统语言区域),可以直接给Picker赋值自定义的DateFormatter:
Swift 代码示例
let datePicker = UIDatePicker() if #available(iOS 14.0, *) { // 可选:选择Picker样式,比如.inline嵌入视图、.compact点击弹出、.wheels传统滚轮 datePicker.preferredDatePickerStyle = .inline // 核心:只显示日期 datePicker.datePickerMode = .date // 自定义格式为"年-月-日"(这里用yyyy-MM-dd示例) let formatter = DateFormatter() formatter.dateFormat = "yyyy-MM-dd" datePicker.dateFormatter = formatter }
Objective-C 代码示例
UIDatePicker *datePicker = [[UIDatePicker alloc] init]; if (@available(iOS 14.0, *)) { datePicker.preferredDatePickerStyle = UIDatePickerStyleInline; datePicker.datePickerMode = UIDatePickerModeDate; NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; formatter.dateFormat = @"yyyy-MM-dd"; datePicker.dateFormatter = formatter; }
二、iOS 13及以下:兼容方案
对于老版本系统,UIDatePicker没有直接设置自定义格式的属性,但依然能实现只显示年月日:
- 核心设置:同样把
datePickerMode设为.date(Swift)或UIDatePickerModeDate(Objective-C),这会让Picker显示传统的年月日滚轮,自动隐藏时分和AM/PM。 - 调整格式(可选):如果需要特定的年月日顺序,比如
年-月-日,可以通过设置locale来实现,比如设置为中文区域:
Swift 代码示例
let datePicker = UIDatePicker() datePicker.datePickerMode = .date // 设置中文区域,自动显示"年-月-日"格式 datePicker.locale = Locale(identifier: "zh_CN")
Objective-C 代码示例
UIDatePicker *datePicker = [[UIDatePicker alloc] init]; datePicker.datePickerMode = UIDatePickerModeDate; datePicker.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"];
关键注意点
- 核心关键:无论哪个版本,
datePickerMode的设置是必须的,只要设为.date,就不会显示时分和AM/PM。 - 如果不需要自定义格式,仅设置
datePickerMode即可,系统会根据用户的系统语言自动适配显示格式。 - iOS14+的样式选择可以根据你的UI需求灵活调整,
.wheels样式和老版本的滚轮体验一致。
内容的提问来源于stack exchange,提问作者Julian Cearley
相关产品推荐
相关产品推荐

