swift - 外观更改时更新小部件
问题描述
我想知道你们中是否有人知道 SwiftUI 中的系统,当外观从light
模式更改为模式时更新小部件,dark
反之亦然。
我可以更改文本和图像,但我使用一种方法来显示地图的屏幕截图,并且每次外观更改时我都应该运行它以获得正确的地图颜色。
解决方案
- 创建两个屏幕截图(每个主题一个)并将其传递到条目中:
struct SimpleEntry: TimelineEntry {
let date: Date
let mapScreenshots: [ColorScheme: Image]
}
struct Provider: TimelineProvider {
...
func getTimeline(in context: Context, completion: @escaping (Timeline<SimpleEntry>) -> Void) {
let entry = SimpleEntry(
date: Date(),
mapScreenshots: [
// replace with actual map screenshots
.dark: Image(systemName: "plus"),
.light: Image(systemName: "minus"),
]
)
let timeline = Timeline(entries: [entry], policy: .never)
completion(timeline)
}
}
- 用于
@Environment(\.colorScheme)
对主题变化做出反应:
struct WidgetEntryView: View {
@Environment(\.colorScheme) var colorScheme
var entry: Provider.Entry
var body: some View {
if let screenshot = entry.mapScreenshots[colorScheme] {
screenshot
}
}
}
推荐阅读
- vba - 如何删除修改字符串以从新工作表中删除字母
- java - 用于异步操作配置的 Spring 集成错误通道
- reactjs - 将 react-native 模块列入黑名单不起作用
- javascript - AMP:添加到
我使用 jQuery 脚本将
<table>
WordPress 帖子的所有 s 附加到<div>
带有 class的 s 中.table_container
。通过这种方式,我可以使每个表格在移动设备上可滚动到已发布的文章上。
jQuery:
for (var r = document
- android - 如果 PhoneGap Build 失败且没有错误消息怎么办?
- android - 在特定条件下触发通知在 Firebase 上满足
- image - 如何用 PIL 画一个三角形?
- sql - SQL WHERE 子句未过滤到标准 MS-Access
- r - dplyr: summarise(first(...)) 返回列名
- c# - 如何在 Winforms 应用程序中捕获标准输入