xcode 如何使用SwiftUI强制DatePicker使用24小时日期格式而不是用户设备上的区域设置

35g0bw71  于 2023-06-07  发布在  Swift
关注(0)|答案(1)|浏览(389)

bounty将在6天内到期。此问题的答案有资格获得+50声望奖励。alionthego希望引起更多关注这个问题。

我试图强制SwiftUI DatePicker覆盖用户的设置,并在选择器本身中仅显示24小时时间格式。这在航空相关的应用程序中是相关的。我看到过一些旧的帖子使用UIDatePicker并覆盖区域设置,但这对我也不起作用。下面是我使用SwiftUI的代码,这在物理设备上不起作用,无法强制24小时内选择。它可以在Xcode模拟器上工作,但不能在实际设备上工作。

DatePicker("Start Time", selection: $startTime, displayedComponents: DatePickerComponents.hourAndMinute)
    .environment(\.locale, Locale.init(identifier: "da"))

当我在地区设置为US的设备上运行此程序时,它仍然在选择器内显示小时和分钟以及am/pm。我试过其他只使用24小时时间的地区,但它仍然显示上午/下午在选择器本身。尽管它确实将所选时间更改为24小时。我的问题是在picker本身。
似乎没有什么可以做的来覆盖用户在设置/常规/日期和时间/24小时时间中的24小时时间设置
我可以实现一个自定义的弹出框和旋转轮来模拟这一点,但在全屏的iPhone上会遇到问题。我相信还有其他使用自定义逻辑的解决方案,但我想知道是否有任何方法可以强制本地DatePicker不使用am/pm。
我可以通过改变语言环境在Xcode模拟器上显示24小时时间,但它在物理设备上不起作用。

s5a0g9ez

s5a0g9ez1#

只需将en_DK更改为da,将en_GB更改为en即可。工作代码在这里。在Swift Playgrounds和真实的设备iPhone 14上测试,iOS 16.5。

import SwiftUI

struct ContentView: View {
    @State var identifier = "en"
    @State var startTime: Date = .now
    
    var body: some View {
        VStack(spacing: 20) {
            DatePicker("Start Time", selection: $startTime, displayedComponents: .hourAndMinute)
            Button("da", action: {
                self.identifier = "da"
            })
            Button("en", action: {
                self.identifier = "en"
            })
        }
        .padding()
        .environment(\.locale, .init(identifier: identifier))
    }
}

相关问题