【iOS】同サイズのWidgetをWidget Galley に並べる方法
WidgetBundle
WidgetBundleを利用することで、同サイズのWidgetや異なる種類のWidgetをWidgetGallery上に並べることができます。
通常のWidget表示
通常は下記のようにWidgetクラスを継承した構造体に対してmain属性を指定し、以下で言うTestWidgetをエントリーポイントに指定します。この方法ではIntentConfigurationのコンテントに指定したViewのみをWidgetGalleryに表示することしかできません。またsystemSmall、systemMedium、systemLargeのサイズごとにしかWidgetGalleryに表示できず、同サイズのWidgetを並べることはできません。
@main
struct TestWidget: Widget {
var body: some WidgetConfiguration {
IntentConfiguration(kind: "Test", intent: ConfigurationIntent.self, provider: Provider()) { entry in
TestWidgetEntryView(entry: TestEntry(date: Date(), testHeader: entry.testHeader , testTitle: "", configuration: ConfigurationIntent()))
}.configurationDisplayName("DisplayName")
.description("Description")
.supportedFamilies([.systemSmall,.systemMedium,systemLarge])
}
}
WidgetBundleの利用
異なるWidgetや同サイズのWidgetをGalleryに表示するには、下記のようにWidgetBundleクラスを継承した構造体をmain属性でエントリーポイントに指定します。その構造体のbody内で別で定義したWidgetクラスを継承した構造体をインスタンス化することでWidgetGalleryに表示することができます。
異なるWidgetを表示したい場合は、表示したい順でインスタンス化します。
同サイズのWidgetを表示したい場合は、対象のWidgetのsupportedFamiliesを一つだけ選び、複数回そのWidgetをインスタンス化したらその分同サイズのWidgetが表示されます。
@main
struct TestWidgetBundle: WidgetBundle {
var body: some Widget {
// 異なるWidget
test1Widget()
test2Widget()
// 同サイズのWidget(systemSmallが二つ表示される)
test2Widget()
test2Widget()
}
}
struct test1Widget: Widget {
var body: some WidgetConfiguration {
IntentConfiguration(kind: "Test1", intent: ConfigurationIntent.self, provider: Provider()) { entry in
TestWidgetEntryView(entry: TestEntry(date: Date(), testHeader: entry.testHeader , testTitle: "", configuration: ConfigurationIntent()))
}.configurationDisplayName("DisplayName")
.description("Description")
.supportedFamilies([.systemSmall,.systemMedium,systemLarge])
}
}
struct test2Widget: Widget {
var body: some WidgetConfiguration {
IntentConfiguration(kind: "Test2", intent: ConfigurationIntent.self, provider: Provider()) { entry in
TestWidgetEntryView(entry: TestEntry(date: Date(), testHeader: entry.testHeader , testTitle: "", configuration: ConfigurationIntent()))
}.configurationDisplayName("DisplayName")
.description("Description")
.supportedFamilies([.systemSmall])
}
}
Author And Source
この問題について(【iOS】同サイズのWidgetをWidget Galley に並べる方法), 我々は、より多くの情報をここで見つけました https://qiita.com/Howasuto/items/a1f28222c7596128d5a8著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .