iOS14 SwiftUI如何统一DatePicker展示文本的日期格式
解决方案
你遇到的是SwiftUI DatePicker的系统默认行为:它会根据所选日期和当前系统区域的习惯自动调整显示格式,比如日期距今日近时显示短格式/相对格式,日期较远时显示长格式,就会出现随机切换的问题,可通过以下两种方案固定格式:
方案1:直接指定日期样式(适合iOS 15及以上版本)
给DatePicker添加dateStyle修饰器,同时固定区域设置避免系统适配跳转,修改后代码如下:
DatePicker(selection: $dob, in: ...Date(), displayedComponents: [.date]) { HStack(spacing: 0) { Text("Select birthday ") Image(systemName: "arrow.right") } .foregroundColor(Color("textfield")) } // 可选值有.short/.medium/.long/.full,固定后不会自动切换 .dateStyle(.long) // 固定区域设置,可根据需要替换标识符,比如en_US代表美式英语格式 .environment(\.locale, Locale(identifier: "zh_CN"))
方案2:自定义显示文本(兼容所有iOS版本,格式完全可控)
如果需要完全自定义显示格式,或者适配iOS 15以下版本,可以通过自定义触发按钮+日期格式化器实现:
- 首先定义日期格式化器
private let dateFormatter: DateFormatter = { let formatter = DateFormatter() // 可任意自定义你需要的格式,比如"yyyy-MM-dd" formatter.dateFormat = "yyyy年MM月dd日" formatter.locale = Locale(identifier: "zh_CN") return formatter }()
- 替换原有DatePicker代码
Menu { DatePicker(selection: $dob, in: ...Date(), displayedComponents: .date) .datePickerStyle(.wheel) .labelsHidden() } label: { HStack(spacing: 0) { Text("\(dateFormatter.string(from: dob)) ") Image(systemName: "arrow.right") } .foregroundColor(Color("textfield")) }
两种方案都可以完全解决日期格式随机切换的问题,按需选择即可。
内容的提问来源于stack exchange,提问作者Hackinator
相关产品推荐
相关产品推荐

