背景#
升級到 Xcode15 後,執行小組件時會出現 WIDGET_BACKGROUND_API_ADOPTION_PROMPT
的提示,如下圖:
解決#
創建 View_Extensions.swift
,程式碼如下:
import SwiftUI
extension View {
@ViewBuilder func adoptableWidgetBackground(_ color: Color) -> some View {
if #available(iOS 17.0, *) {
containerBackground(for: .widget) { color }
} else {
background(color)
}
}
}
然後在 XXXLineProvider
中,找到 ZZZ_WidgetEntryView: View
,修改如下:
struct ZZZ_WidgetEntryView: View {
var body: some View {
...
// 添加如下程式碼
.adoptableWidgetBackground(Color.clear)
}
}
再次執行,發現這個提示已經消失,小組件可以顯示出來;但是還有個問題 —— 如果小組件背景是圖片的,會發現周邊加了一圈白色邊框,解決方法如下,創建 WidgetConfiguration_Extensions.swift
:
import SwiftUI
extension WidgetConfiguration {
func adoptableWidgetContentMargin() -> some WidgetConfiguration {
if #available(iOSApplicationExtension 15.0, *) {
return contentMarginsDisabled()
} else {
return self
}
}
}
然後在 XXXLineProvider
中,找到 ZZZWidget: Widget
,修改如下:
struct ZZZWidget: Widget {
public var body: some WidgetConfiguration {
IntentConfiguration(...) { entry in
...
}
.configurationDisplayName("displayName")
.supportedFamilies([WidgetFamily.systemMedium])
// 添加如下屬性設定即可
.adoptableWidgetContentMargin()
}
}
再次執行即可解決。