如何解决为什么SwiftUI格式在navigationTitle中日期为“ 2020 M10 27”?
我正在使用Xcode 12.1和iOS 14.1模拟器。
使用最简单的代码
pub fn dothings() -> ! {
let mut cnt = 1;
loop {
println!("doing things {} times",cnt);
thread::sleep(time::Duration::from_secs(5));
cnt = cnt +1;
if cnt == 5 {
todo!("put something other than break here");
}
}
}
,导航栏标题和内容视图之间的日期格式似乎有所不同:
Text.init(_:style:)
我希望标题和内容看起来像是“ 2020年10月27日”,但是标题看起来像是“ 2020 M10 27”。我以前从未见过这种格式。
将自定义格式化程序与struct ContentView: View {
var body: some View {
NavigationView {
Text(Date(),style: .date)
.navigationTitle(
Text(Date(),style: .date)
)
}
}
}
一起使用可获得相同的结果:
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:)
这是怎么回事?为了在导航标题中显示日期,我真的需要这种解决方法吗?
解决方法
是的,不幸的是,它看起来像个错误。
作为解决方法,您可以创建扩展程序:
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())
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。