更改 SwiftUI 文本 .timer 格式

Posted

技术标签:

【中文标题】更改 SwiftUI 文本 .timer 格式【英文标题】:Change SwiftUI Text .timer format 【发布时间】:2020-10-29 20:35:20 【问题描述】:

我正在尝试使用 SwiftUI 创建一个小部件,并且我想使用 Text 中的“.timer”样式 但Text(entry.date, style: .timer) 的结果 类似于15:34:23

但我想要小时和分钟部分分开。

我怎样才能做到这一点?

我试图获取文本的字符串值并在一个方法中对其进行格式化,但似乎没有办法像我们在 Swift 中那样获取文本字符串,例如 someLabel.text

我也找到了与我相似的this question,但我在那里找不到任何答案

我也不想使用this solution,因为加载小部件需要更长的时间。

提前致谢。

【问题讨论】:

这能回答你的问题吗? Updating time text label each minute in WidgetKit 实际上,我不想使用该解决方案,因为以这种方式加载小部件需要更长的时间。它适用于简单的小部件,但我的小部件有点复杂,使用此解决方案可能需要几分钟才能加载,但使用 .timer 方法,它是即时的,因为无需提前添加 60 * 24 个整体 您无法更改.timer 格式,因此您可能需要提前创建条目。 有什么方法可以像 someLabel.text 一样在 Swift 中获取 Text 字符串? 没有。这里的问题是 Widget 视图是静态的。您无法从视图本身内部刷新它们。您需要重新加载时间线。如果您不想一整天都创建条目(正如您所说的那样很慢),您可以只创建一个小时然后重新加载。 【参考方案1】:
Text(Calendar.current.startOfDay(for: Date()), style: .timer)

但是0点钟不显示小时,10点之前只显示一位数的小时。

【讨论】:

但我只是想抓住它的一小部分 我的问题是如何更改格式,但它仍然显示 hh:mm:ss 的原始格式 我的代码是显示当前时间和0点之间的小时:分钟:秒。例如,如果当前时间是早上 10:20,那么距离 0 的距离是 10 小时 20 分钟。格式为默认HH:mm:ss,不能修改。

以上是关于更改 SwiftUI 文本 .timer 格式的主要内容,如果未能解决你的问题,请参考以下文章

在 ScrollView 中将文本对齐为前导 - SWIFTUI

SwiftUI - 使用淡入淡出动画更改文本

如何在 SwiftUI 中动画/过渡文本值更改

根据 SwiftUI 中的切换值更改文本

更改布尔值时无法在 SwiftUI 中更改按钮文本

输入 SwiftUI 后更改文本字段的焦点