【发布时间】:2021-02-19 18:28:12
【问题描述】:
对于我的小部件,我希望用户能够选择他们选择的小部件背景颜色,但我似乎无法让它工作。
我正在尝试使用 ColorPicker 和 @AppStorage 来做到这一点
ColorPicker("Background Color", selection: Binding(get: {
bgColor
}, set: { newValue in
backgroundColor = self.updateColorInAppStorage(color: newValue)
bgColor = newValue
}))
.frame(width: 200, height: 50)
.font(.headline)
backgroundColor 是一个 @AppStorage 变量,用于保存 RGB 值
在我的 Widget 扩展类中,我使用这个变量来设置 @main 结构中的小部件背景颜色:
@main
struct MyWidget: Widget {
@AppStorage("backgroundColor", store: UserDefaults(suiteName: "group.com.MyWidget")) var backgroundColor = ""
@State private var bgColor = Color(UIColor.systemBackground)
let kind: String = "Count"
var body: some WidgetConfiguration {
IntentConfiguration(kind: kind, intent: ConfigurationIntent.self, provider: Provider()) { entry in
SubscriberCountEntryView(entry: entry)
.frame(maxWidth: .infinity, maxHeight: .infinity)
.background(bgColor)
.onAppear {
if (backgroundColor != "") {
let rgbArray = backgroundColor.components(separatedBy: ",")
if let red = Double(rgbArray[0]), let green = Double(rgbArray[1]), let blue = Double(rgbArray[2]), let alpha = Double(rgbArray[3]) {
bgColor = Color(.sRGB, red: red, green: green, blue: blue, opacity: alpha)
}
}
}
}
.configurationDisplayName("Count")
.supportedFamilies([.systemSmall, .systemMedium])
}
}
这似乎只在应用首次安装在设备上时才有效。之后,无论我选择多少次颜色并更新小部件,背景颜色都不会改变。如果我删除并再次安装该应用程序,颜色会改变。
关于如何正确执行此操作的任何想法?
【问题讨论】:
标签: ios swift swiftui widgetkit