isPlaceholder 修饰符不可用且在小部件工具包 + SwiftUI 中不起作用

Posted

技术标签:

【中文标题】isPlaceholder 修饰符不可用且在小部件工具包 + SwiftUI 中不起作用【英文标题】:isPlaceholder modifier not available and not working in widget kit + SwiftUI 【发布时间】:2021-05-05 12:49:38 【问题描述】:

我正在关注 Fromm wwdc 2020 中的小部件代码,在第一部分中他们提到使用带有 .isPlacholder 的新占位符 API。所以我尝试在我的小部件中实现它,如下所示:

struct PlaceholderView: View 
    var body: some View 
        RandomWidgetView(book: testBook)
            .isPlaceholder(true)
    

但是我得到了错误Value of type 'RandomWidgetView' has no member 'isPlaceholder'。谷歌搜索后,我发现了这个:

struct PlaceholderView: View 
    var body: some View 
        RandomWidgetView(book: testBook)
            .redacted(reason: .placeholder)
    

但是,这并没有创建正确的占位符,而是完全删除了里面的视图。

我是缺少导入还是自 wwdc 以来已更改?如何创建正确的占位符?

【问题讨论】:

【参考方案1】:

在您的 Widget 扩展中,您应该有类似这样的代码,因为我在这里拥有它只是默认的 Widget 实现。如果您将 .redacted(reason: .placeholder) 放在拥有 Provider.Entry 的视图中,它应该会为您提供所需的结果。

// other TimelineProvider code...

struct RandomWidgetViewEntryView: View 
    var entry: Provider.Entry

    var body: some View 
        Text(entry.date, style: .time)
            .redacted(reason: .placeholder)
    


@main
struct RandomWidgetView: Widget 
    let kind: String = "RandomWidgetView"

    var body: some WidgetConfiguration 
        StaticConfiguration(kind: kind, provider: Provider())  entry in
            RandomWidgetViewEntryView(entry: entry)
        
        .configurationDisplayName("My Widget")
        .description("This is an example widget.")
    

【讨论】:

【参考方案2】:

最初的 .isPlaceholder(_:) API 在 ios 14 beta 3 中已更改为 .redacted(reason:) API,这就是编译器无法识别 isPlaceholder 调用的原因。

正确使用方法如下:How to mark content as a placeholder using redacted()

【讨论】:

以上是关于isPlaceholder 修饰符不可用且在小部件工具包 + SwiftUI 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

extern 访问修饰符不起作用

Jetpack Compose 第一个参数修饰符不起作用

当使用vue的按键修饰符不起效果的时候怎么办?如@keyup.enter = '' ;

PC分配盘符的时候发现==》RPC盘符不可用

如何在小部件上连续点击一次并在小部件像钢琴一样触摸钢琴键时执行一些操作?

在小部件中打开一个活动