锁屏Swift小部件仅适用于iOS 16用户

发布于 2025-02-11 21:54:05 字数 475 浏览 2 评论 0原文

我有多个针对iOS 14用户及以上的小部件。但是有了新的锁屏窗口小部件,它仅适用于iOS 16用户。我只能为iOS 16用户制作底部的两个小部件?如果我删除顶级线,那么我相信它将使所有小部件仅适用于iOS 16用户,但我不能这样做,我希望我的用户能够继续使用主屏幕窗口小部件,如果他们在iOS 14--上15。

import WidgetKit
import SwiftUI


//@available(iOSApplicationExtension 16.0, *)
@main
struct Widgets: WidgetBundle {
    @WidgetBundleBuilder
    var body: some Widget {
        Widget1()
        Widget2()
        Widget3()
        LockscreenWidget1()
        LockscreenWidget2()
    }
}

I have multiple widgets that are for iOS 14 users and above. But with the new lockscreen widgets, it's only available to iOS 16 users. How can I only make the bottom two widgets for iOS 16 users? If I uncomment the top line then I believe it will make all widgets only available to iOS 16 users but I can't do that, I want my users to be able to continue using the home screen widgets if they're on iOS 14-15.

import WidgetKit
import SwiftUI


//@available(iOSApplicationExtension 16.0, *)
@main
struct Widgets: WidgetBundle {
    @WidgetBundleBuilder
    var body: some Widget {
        Widget1()
        Widget2()
        Widget3()
        LockscreenWidget1()
        LockscreenWidget2()
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

无边思念无边月 2025-02-18 21:54:05

您需要在小部件逻辑中配置它。

例如

@main
struct MyWidget: Widget {
    
    private let supportedFamilies: [WidgetFamily] = {
        if #available(iOSApplicationExtension 16.0, *) {
            return [.systemSmall, .systemMedium, .systemLarge, .systemExtraLarge, .accessoryInline, .accessoryCircular, .accessoryRectangular]
        } else if #available(iOSApplicationExtension 15.0, *) {
            return [.systemSmall, .systemMedium, .systemLarge, .systemExtraLarge]
        } else {
            return [.systemSmall, .systemMedium, .systemLarge]
        }
    }()
    
    var body: some WidgetConfiguration {
        StaticConfiguration(kind: kind, provider: Provider()) { entry in
            MyWidgetEntryView(entry: entry)
        }
        .configurationDisplayName("Demo Name")
        .description("Description of the demo.")
        .supportedFamilies(supportedFamilies)
    }
}

You need to configure it inside your Widget logics.

e.g.

@main
struct MyWidget: Widget {
    
    private let supportedFamilies: [WidgetFamily] = {
        if #available(iOSApplicationExtension 16.0, *) {
            return [.systemSmall, .systemMedium, .systemLarge, .systemExtraLarge, .accessoryInline, .accessoryCircular, .accessoryRectangular]
        } else if #available(iOSApplicationExtension 15.0, *) {
            return [.systemSmall, .systemMedium, .systemLarge, .systemExtraLarge]
        } else {
            return [.systemSmall, .systemMedium, .systemLarge]
        }
    }()
    
    var body: some WidgetConfiguration {
        StaticConfiguration(kind: kind, provider: Provider()) { entry in
            MyWidgetEntryView(entry: entry)
        }
        .configurationDisplayName("Demo Name")
        .description("Description of the demo.")
        .supportedFamilies(supportedFamilies)
    }
}
千秋岁 2025-02-18 21:54:05
var body: some Widget {
    widgets()
}

func widgets() -> some Widget {
    if #available(iOS 16.0, *) {
        return WidgetBundleBuilder.buildBlock(LockscreenWidget1(), Widget1())
    } else {
        return Widget1()
    }
}
var body: some Widget {
    widgets()
}

func widgets() -> some Widget {
    if #available(iOS 16.0, *) {
        return WidgetBundleBuilder.buildBlock(LockscreenWidget1(), Widget1())
    } else {
        return Widget1()
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文