SwiftUI如何设置仅选时间的DatePicker为AM/PM12小时制格式
问题原因
你之前的写法无法生效,核心原因是displayedComponents参数仅接受DatePickerComponents类型的预定义枚举值(比如.hourAndMinute、.date),作用是控制选择器展示日期/时间的哪些选择维度,根本不支持传入自定义dateFormat配置,传参逻辑本身就不成立。
正确实现方案
SwiftUI的DatePicker默认跟随系统区域(Locale)的规则决定使用12/24小时制,要强制固定为AM/PM的12小时制样式,同时仅保留时间选择、隐藏日期模块,只需要给选择器单独指定默认12小时制的区域配置即可,不需要修改displayedComponents的传值:
// 滚轮样式下会直接显示时、分、AM/PM三个选择列,无日期选项 DatePicker("Time", selection: $wakeUp, displayedComponents: .hourAndMinute) .environment(\.locale, Locale(identifier: "en_US_POSIX"))
补充说明
- 示例中使用的
Locale(identifier: "en_US_POSIX")是POSIX标准的美式英语区域,默认固定使用12小时制AM/PM格式,不会受用户系统的24小时制全局开关影响,展示效果稳定。 - 如果你需要保留当前系统语言的本地化文案,仅强制12小时制展示,可以自行组合Locale的语言和区域参数,只要所选区域默认采用12小时制即可。
displayedComponents传入.hourAndMinute就已经是「仅保留时间选择、隐藏所有日期选择模块」的正确配置,不需要额外传其他参数。
内容的提问来源于stack exchange,提问作者Arturo
相关产品推荐
相关产品推荐

