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



我有多个适用于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()
}
}

您需要在您的Widget逻辑中配置它。

@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)
}
}
var body: some Widget {
widgets()
}
func widgets() -> some Widget {
if #available(iOS 16.0, *) {
return WidgetBundleBuilder.buildBlock(LockscreenWidget1(), Widget1())
} else {
return Widget1()
}
}

最新更新