无法在iOS14中的UIDatePicker上设置24小时格式

问题描述

当样式设置为UIDatePicker时,我无法将.compact设置为24小时格式。

当日期选择器的样式设置为.wheels.inline时,我可以将格式设置为24小时。

如下面的代码所示,我将Date Formatter的语言环境设置为“ en_GB”以获取24h格式。复制此模拟器时,会将其设置为美国作为区域。

如果我未设置语言环境,则.compact样式还会显示AM / PM选择器,而使用下面的代码则不存在。

这是我的代码UIDatePicker添加为情节提要中的唯一项:

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var datePicker: UIDatePicker!

    var dateFormatter = DateFormatter()

    override func viewDidLoad() {
        super.viewDidLoad()
        
        // setting this should give 24 hr format also in United States region,but it doesn't 
        dateFormatter.locale = Locale(identifier: "en_GB") 
    
        datePicker.locale = dateFormatter.locale
        datePicker.datePickerMode = .time
        datePicker.preferredDatePickerStyle = UIDatePickerStyle.compact
    }
}

在这里错过了什么吗,还是不能.compact样式完成?

解决方法

您无法在应用中更改UIDatePicker的格式。 日期选择器的格式与用户在“设置”应用中选择的格式相同。只需转到Settings -> General -> Date and Time即可更改设备上的格式。

,

我在iOS 14 Simulator中对此进行了实验。看来属性分配的顺序很重要。

这有效:

let datePicker = UIDatePicker()
datePicker.locale = NSLocale(localeIdentifier: "en_GB") as Locale // 24 hour time
datePicker.timeZone = TimeZone(identifier: "UTC")
datePicker.datePickerMode = .dateAndTime
datePicker.preferredDatePickerStyle = .inline

有效:

let datePicker = UIDatePicker()
datePicker.timeZone = TimeZone(identifier: "UTC")
datePicker.datePickerMode = .dateAndTime
datePicker.preferredDatePickerStyle = .inline
datePicker.locale = NSLocale(localeIdentifier: "en_GB") as Locale // 24 hour time

最后放置“语言环境”设置似乎不起作用,并暴露了UIKit中的一个错误,该错误未公开am / pm设置,导致只能进行小时01-12设置。