【问题标题】:.unredacted() SwiftUI - Placeholder.unredacted() SwiftUI - 占位符
【发布时间】: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


    【解决方案1】:

    我无法确定这是否只是偶然,但是,我能够通过将 .unredacted() 添加到 WidgetBundle 中的所有小部件来解决此问题。

    我发现如果其中 1 个没有调用 unredacted() 的函数,那么它会自动将它们抛出。

    我想这是有道理的。除非另有说明,否则所有内容均已编辑。很奇怪,它在模拟器上正常工作,但在设备上却失败了。不过,如果其他人遇到同样的问题,请考虑在 WidgetBundle 中的所有 Widget 上使用 .unredacted()。

    【讨论】:

      猜你喜欢
      • 2021-01-12
      • 2020-04-20
      • 2020-08-03
      • 1970-01-01
      • 2020-10-25
      • 2020-07-08
      • 1970-01-01
      • 2017-10-12
      • 2013-09-13
      相关资源
      最近更新 更多