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

如何让UIDatePicker始终显示时:分,不受阿拉伯语系统语言影响?

问题:UIDatePicker切换阿拉伯语时显示“分:时”,如何强制始终显示“时:分”?

我在故事板中设置了一个显示时:分的UIDatePicker,但将手机切换为阿拉伯语时,控件会显示分:时。请问有没有办法让它始终显示“时:分”,不受系统语言影响?

已尝试的方法

  • UIDatePicker.appearance().semanticContentAttribute = .forceLeftToRight
  • timePicker.locale = Locale(identifier: "en_US")
  • timePicker.calendar.locale = Locale(identifier: "en_US")
  • timePicker.semanticContentAttribute = .forceLeftToRight

更新于2023-12-19

以下截图展示了问题情况(示例时间为16:00,即下午4点):我希望无论系统语言如何,始终保持LTR(从左到右)显示。

  • 手机区域与语言设置为加拿大-英语:
    加拿大-英语下的UIDatePicker显示
  • 手机区域与语言设置为加拿大-阿拉伯语:
    加拿大-阿拉伯语下的UIDatePicker显示

解决方案

方法一:使用en_POSIX区域设置+强制语义方向

en_POSIX是不受系统语言影响的中立区域设置,比普通区域标识更稳定,结合强制左到右语义方向可以解决问题:

// 针对单个UIDatePicker实例配置
timePicker.datePickerMode = .time
timePicker.locale = Locale(identifier: "en_POSIX")
timePicker.semanticContentAttribute = .forceLeftToRight

// 如果需要全局生效,用Appearance代理
UIDatePicker.appearance().locale = Locale(identifier: "en_POSIX")
UIDatePicker.appearance().semanticContentAttribute = .forceLeftToRight

方法二:iOS 14+直接设置固定日期格式

iOS 14及以上版本支持直接给UIDatePicker设置dateFormat属性,强制固定显示格式:

if #available(iOS 14.0, *) {
    timePicker.datePickerMode = .time
    timePicker.dateFormat = "HH:mm" // 24小时制,12小时制用"hh:mm a"
    timePicker.locale = Locale(identifier: "en_POSIX")
}

注意事项

  • 避免使用en_US这类依赖系统区域的标识,en_POSIX能确保格式完全不受系统语言/区域变更影响;
  • 如果是故事板创建的控件,务必在viewDidLoad或viewWillAppear中执行上述配置,覆盖故事板的默认设置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 17:40:23