gpt4 book ai didi

swiftui - 为什么 SwiftUI 在 navigationTitle 中将日期格式化为 "2020 M10 27"?

转载 作者:行者123 更新时间:2023-12-05 06:58:39 25 4
gpt4 key购买 nike

我正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com