为什么 SwiftUI 在 navigationTitle 中将日期格式设置为“2020 M10 27”?
Why does SwiftUI format dates as "2020 M10 27" in navigationTitle?
我正在使用 Xcode 12.1 和 iOS 14.1 模拟器。
使用最简单的代码 Text.init(_:style:)
,导航栏标题和内容视图之间的日期格式似乎有所不同:
struct ContentView: View {
var body: some View {
NavigationView {
Text(Date(), style: .date)
.navigationTitle(
Text(Date(), style: .date)
)
}
}
}
我希望标题和内容看起来像“2020 年 10 月 27 日”,但标题看起来像“2020 M10 27”。我以前从未见过这种格式。
将自定义格式化程序与 Text.init(_: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"
)
}
}
}
最后,pre-formatting 带有 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"
)
}
}
}
这是怎么回事?我真的需要这个解决方法才能在导航标题中显示日期吗?
是的,不幸的是它看起来像一个错误。
作为解决方法,您可以创建一个扩展:
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())
)
我正在使用 Xcode 12.1 和 iOS 14.1 模拟器。
使用最简单的代码 Text.init(_:style:)
,导航栏标题和内容视图之间的日期格式似乎有所不同:
struct ContentView: View {
var body: some View {
NavigationView {
Text(Date(), style: .date)
.navigationTitle(
Text(Date(), style: .date)
)
}
}
}
我希望标题和内容看起来像“2020 年 10 月 27 日”,但标题看起来像“2020 M10 27”。我以前从未见过这种格式。
将自定义格式化程序与 Text.init(_: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"
)
}
}
}
最后,pre-formatting 带有 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"
)
}
}
}
这是怎么回事?我真的需要这个解决方法才能在导航标题中显示日期吗?
是的,不幸的是它看起来像一个错误。
作为解决方法,您可以创建一个扩展:
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())
)