我正在使用 Xcode 12.1 和 iOS 14.1 模拟器。
使用 Text.init(_:style:)
的最简单代码,导航栏标题和内容 View 之间的日期格式似乎有所不同:
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"
)
}
}
}
最后,使用 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())
)
关于swiftui - 为什么 SwiftUI 在 navigationTitle 中将日期格式化为 "2020 M10 27"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64566387/