LoginSignup
1
2

【SwiftUI】Please adopt containerBackground APIでウィジェットが表示されない(iOS17)

Posted at

はじめに

iOS17でウィジェットを実行したら以下のような文がウィジェットに表示されました。

Please adopt containerBackground API

IMG_4889.PNG

日本語にすると「containerBackground APIを採用してください。」らしいです。

全く表示されないのはまずいです。高速で対応します。

実装

extension View {
    // ウィジェットのbackgroundを設定する
    @ViewBuilder
    func widgetBackground(_ style: some ShapeStyle) -> some View {
        if #available(iOSApplicationExtension 17.0, *) {
            self.containerBackground(for: .widget) {
                ContainerRelativeShape().foregroundStyle(AnyShapeStyle(style))
            }
        } else {
            self.background(AnyShapeStyle(style))
        }
    }
}

使い方

struct DemoWidgetEntryView : View {
    var entry: Provider.Entry

    var body: some View {
        VStack {
            Text("Time:")
            Text(entry.date, style: .time)

            Text("Emoji:")
            Text(entry.emoji)
        }
+       .widgetBackground(.red)
    }
}

注意
Xcode15で新たにプロジェクトを作成した場合は、初期の段階でcontainerBackgroundのための分岐が入っています。
新規プロジェクトで試される方はこのコードを削除して使用してください。

if #available(iOS 17.0, *) {
    DemoWidgetEntryView(entry: entry)
        .containerBackground(.fill.tertiary, for: .widget)
} else {
    DemoWidgetEntryView(entry: entry)
        .padding()
        .background()
}

おわり

iOS17でウィジェット関連めっちゃ変更入りましたね

公式ドキュメント
https://developer.apple.com/documentation/SwiftUI/View/containerBackground(_:for:)

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2