提问人:GarySabo 提问时间:9/26/2023 最后编辑:arseniusGarySabo 更新时间:9/27/2023 访问量:46
SwiftUI 和 WidgetKit:让 AM 和 PM 换行到第二行
SwiftUI and WidgetKit: Getting AM and PM to wrap to a second line
问:
在手表上的 WidgetKit 中工作时,我无法弄清楚如何设置此文本的样式以使其看起来正确。问题在于,在 Am/PM 时间样式合适的位置,系统仅将 M 换行到下一行,我希望 AM 和 PM 都换行到第二行。在他们使用 24 小时制的地方,不应该有上午 和 下午。我怎样才能做到这一点?
static let sleepTimeFormat: DateFormatter = {
let formatter = DateFormatter()
formatter.dateStyle = .none
formatter.timeStyle = .short
return formatter
}()
Text("\(targetBedTime, formatter: Self.sleepTimeFormat)")
.font(.system(size: 14))
.fontWeight(.bold)
答:
1赞
arsenius
9/27/2023
#1
您可以使用加号将空格替换为换行符来完成这项工作。ViewThatFits
let timeString = Self.sleepTimeFormat.string(from: .now)
ViewThatFits {
Text(timeString).lineLimit(1)
Text(timeString.replaceCharacters(from: .whitespaces, with: "\n")) // The formatter doesn't use a regular " "
}
.font(.system(size: 14))
.fontWeight(.bold)
.frame(width: 50) // Ensure second option gets displayed
// Convenience method
extension String {
func replaceCharacters(from characterSet: CharacterSet, with replacementString: String = "") -> String {
self.components(separatedBy: characterSet).joined(separator: replacementString)
}
}
结果:
评论