如何让UIDatePicker始终显示时:分,不受阿拉伯语系统语言影响?
问题:UIDatePicker切换阿拉伯语时显示“分:时”,如何强制始终显示“时:分”?
我在故事板中设置了一个显示时:分的UIDatePicker,但将手机切换为阿拉伯语时,控件会显示分:时。请问有没有办法让它始终显示“时:分”,不受系统语言影响?
已尝试的方法
UIDatePicker.appearance().semanticContentAttribute = .forceLeftToRighttimePicker.locale = Locale(identifier: "en_US")timePicker.calendar.locale = Locale(identifier: "en_US")timePicker.semanticContentAttribute = .forceLeftToRight
更新于2023-12-19
以下截图展示了问题情况(示例时间为16:00,即下午4点):我希望无论系统语言如何,始终保持LTR(从左到右)显示。
- 手机区域与语言设置为加拿大-英语:
- 手机区域与语言设置为加拿大-阿拉伯语:
解决方案
方法一:使用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
相关产品推荐
相关产品推荐

