问题描述
当样式设置为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设置。