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

标签 swiftui nsdateformatter dateformatter

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

相关文章:

swift - RealityKit – 如何将视频素材添加到 ModelEntity?

iOS 可读字符串/日期格式化程序

ios - 将日期时间转换为仅时间

javascript - 使用 moment.js 或使用 JQuery/Javascript 以英文和日文显示日期

ios - 如何将 UIDatePicker 中的日期和时间设置为 12 小时格式的 UITextField

swift - 如何将 View 的尾部对齐方式与其父级的垂直轴对齐?

ios - 在 Swift UI 中实现核心数据而不崩溃

ios - 如何在 Swift iOS 中将字符串转换为日期字符串?

java - 在 Java 中定义一些特定的日期格式化程序作为枚举的成员

swift - 如何使用来自单例类中的枚举的状态在 Swift UI 中的 View 中触发警报