【发布时间】:2021-05-21 06:52:28
【问题描述】:
首先,我是 SwiftUI 的新人,如果我不知道确切的结构或最佳实践,我深表歉意。其次,我多年没有编程,但需要更好地理解 Swift 语言。
系统:
OSX:11.3.1
XCode 12.5
iPhone:14.5.1
我目前正在努力使我的代码获得一致的结果。我正在使用 WidgetKit/WidgetBundle 来做一些非常基本的事情,比如显示文本。就是这样。
但是,即使在模拟器中它工作正常(未编辑),我也面临着设备上的编辑视图。下面是一个非常基本的带有文本的 VStack。我添加了 unredacted() 函数,我认为它会强制显示文本。
VStack {
Text("TRANSPONDER")
.kerning(3.0)
.font(.system(size: 20, weight: .light, design: .rounded))
**.unredacted()**
.frame(maxWidth: .infinity, maxHeight: .infinity)
.clipped()
.padding(.all, 0)
.foregroundColor(Color.white)
.background(Color(.displayP3, red: 49.1/255, green: 70.97/255, blue: 85/255))
Spacer()
}
在我的TimelineProvider()下面的代码
struct TransponderGA_TimelineProvider: TimelineProvider {
typealias Entry = TransponderGA_Entry
func placeholder(in context: Context) -> TransponderGA_Entry {
let entry = TransponderGA_Entry(date: Date(),transpondergacode: TransponderCodeGA.init(transponderGACode: "123", transponderGAText: "dswer"))
return entry
}
func getSnapshot(in context: Context, completion: @escaping (TransponderGA_Entry) -> Void) {
let entry = TransponderGA_Entry(date: Date(), transpondergacode: TransponderCodeGA.init(transponderGACode: "1200", transponderGAText: "GA Airspace"))
completion(entry)
}
func getTimeline(in context: Context, completion: @escaping (Timeline<TransponderGA_Entry>) -> Void) {
let currentDate = Date()
let refreshDate = Calendar.current.date(byAdding: .second, value: 10, to: currentDate)!
TransponderGA_Manager.getGATransponder() { (transgacode) in
guard let tcga = transgacode else { return }
let entry = TransponderGA_Entry(date: currentDate, transpondergacode: tcga)
let timeline = Timeline(entries: [entry], policy: .after(refreshDate))
completion(timeline)
}
}
出现以下结果。但是,如果我将完全相同的代码与小部件系列中的另一个小部件一起使用,它会完美运行。
正如您所看到的,这次在设备和模拟器上使用另一个小部件中的相同代码可以正常工作。我完全不知道为什么它可以在 1 个小部件中工作,而另一个则完全隐藏了设备上的内容。
以前有人经历过这样的事情吗?
【问题讨论】:
标签: ios swift xcode swiftui widget