为什么SwiftUI将日期格式化为;2020 M10 27“;在导航标题中?
我使用的是Xcode 12.1和iOS 14.1模拟器 使用为什么SwiftUI将日期格式化为;2020 M10 27“;在导航标题中?,swiftui,nsdateformatter,dateformatter,Swiftui,Nsdateformatter,Dateformatter,我使用的是Xcode 12.1和iOS 14.1模拟器 使用Text.init(quo:style:)的最简单代码,导航栏标题和内容视图之间的日期格式似乎有所不同: struct ContentView: View { var body: some View { NavigationView { Text(Date(), style: .date) .navigationTitle( Text(Date(), style: .date)
Text.init(quo:style:)
的最简单代码,导航栏标题和内容视图之间的日期格式似乎有所不同:
struct ContentView: View {
var body: some View {
NavigationView {
Text(Date(), style: .date)
.navigationTitle(
Text(Date(), style: .date)
)
}
}
}
我希望标题和内容看起来像“2020年10月27日”,但标题看起来像“2020年10月27日”。我以前从未见过这种格式
将自定义格式设置程序与Text.init(\uquo:Formatter:)
一起使用会得到相同的结果:
struct ContentView: View {
var body: some View {
let formatter: DateFormatter = {
let formatter = DateFormatter()
formatter.dateStyle = .long
return formatter
}()
NavigationView {
Text(Date(), formatter: formatter) // "October 27, 2020"
.navigationTitle(
Text(Date(), formatter: formatter) // "2020 M10 27"
)
}
}
}
最后,使用Formatter.string(from:)
预格式化字符串,得到预期的结果:
import SwiftUI
struct ContentView: View {
var body: some View {
let formatter: DateFormatter = {
let formatter = DateFormatter()
formatter.dateStyle = .long
return formatter
}()
NavigationView {
Text(formatter.string(from: Date())) // "October 27, 2020"
.navigationTitle(
Text(formatter.string(from: Date())) // "October 27, 2020"
)
}
}
}
这是怎么回事?为了在导航标题中显示日期,我真的需要这个解决方法吗?是的,不幸的是,它看起来像一个bug
作为解决方法,您可以创建一个扩展:
extension Text {
static let dateFormatter: DateFormatter = {
let formatter = DateFormatter()
formatter.dateStyle = .long
return formatter
}()
init(date: Date) {
self.init(Text.dateFormatter.string(from: date))
}
}
因此,在navigationTitle
中有相同数量的代码:
.navigationTitle(
Text(date: Date())
)
通过子类化DateFormatter,我确定当格式化程序用于标题栏时,
区域设置
设置不正确-它被设置为空的区域设置标识符,而不是我的默认“en_US”。我仍然不知道为什么会发生这种情况,使用.environment(\.locale,locale.current)
覆盖也没有帮助。开发论坛上一名苹果员工的建议确认这是一个bug:。我提交了FB8831937。