iOS 14 Text(),带计时器,持续天

iOS 14 Text(),带计时器,持续天,text,timer,swiftui,widget,ios14,Text,Timer,Swiftui,Widget,Ios14,我正在iOS 14中构建一个小部件,用于倒计时事件发生前的天数。我希望计时器有天、小时、分钟和秒。到目前为止,我发现文本(someFutureDate,style:.timer)工作(几乎)完美。唯一的缺点是它只计算小时:分钟:秒 目前,我的应用程序中的下一个事件还有79天,因此显示1915小时并不是最方便用户的事情。是否有人有聪明的技巧来显示天:小时:分钟:秒?下面的代码在文本中给出了“2天,3小时” let components = DateComponents(day: 2, hour:

我正在iOS 14中构建一个小部件,用于倒计时事件发生前的天数。我希望计时器有天、小时、分钟和秒。到目前为止,我发现
文本(someFutureDate,style:.timer)
工作(几乎)完美。唯一的缺点是它只计算小时:分钟:秒


目前,我的应用程序中的下一个事件还有79天,因此显示1915小时并不是最方便用户的事情。是否有人有聪明的技巧来显示
天:小时:分钟:秒

下面的代码在文本中给出了“2天,3小时”

let components = DateComponents(day: 2, hour: 3, minute: 4, second: 5)
let futureDate = Calendar.current.date(byAdding: components, to: Date())!
Text(futureDate, style: .relative)

文本一次仅显示两个日期组件。一旦天降为零,标签将更改为“X小时,Y分钟”,一旦小时降为零,标签将更改为“X分钟,Y秒”,苹果将处理文本标签中的时间格式,因此您不能修改样式(.relative/.offset/.timer)之外的格式。

查看您是否可以添加天和计时器之类的内容

struct ContentView: View {
    let days: String
    var body: some View {
        HStack { 
          Text(days)
          Text(":")
          Text(Date(), style: .timer)
        }
    }
}
您可以使用TimelineProvider并使小部件在每个午夜更新

func getTimeline(in context: Context, completion: @escaping (Timeline<Entry>) -> ()) {
       let dayremaining = 10 // your day from main app
       let midnight = Calendar(identifier: .gregorian).startOfDay(for: Date())
       let timeline = Timeline(entries: [ContentView(days:dayremaining)], policy: .after(midnight))

    }
func getTimeline(在上下文中:上下文,完成:@escaping(Timeline)->()){
让DayLeving=10//从主应用程序开始您的一天
让午夜=日历(标识符:。格里高利)。startOfDay(对于:Date())
let timeline=timeline(条目:[ContentView(剩余天数)],策略:。午夜之后)
}