[英]iOS 14 widget - getTimeline - detect light and dark mode
在我的 iOS14 小部件中,我需要檢測系統的明暗模式,因為基於此,我在時間軸創建過程中會進行不同的操作。
我努力了
struct WidgetProvider: IntentTimelineProvider {
@Environment(\.colorScheme) var colorScheme
func getTimeline(
for configuration: MyConfigurationIntent,
in context: Context,
completion: @escaping (Timeline<Entry>) -> Void
) {
//colorScheme is never equal to .dark
}
}
如果我使用let darkMode = UITraitCollection.current.userInterfaceStyle ==.dark
而不是colorScheme
,它可以工作,但只有一次。 如果我更改模式並重新加載小部件,它仍然使用舊的顏色模式。
如何正確檢測模式?
首先,@Environment 變量只能在@Environment
視圖中使用。 您不能在IntentTimelineProvider
中使用它們。
然后,您正確嘗試了一種用於colorScheme
檢測的替代方法:
let darkMode = UITraitCollection.current.userInterfaceStyle == .dark
問題是,當您更改外觀時,條目(和時間線本身)不會重新生成。 只有視圖被重繪。
最好的方法是直接在視圖中使用@Environment(\.colorScheme)
。 看到這個答案:
如果您確實需要在時間軸中創建與顏色方案相關的變量,我建議您為兩種顏色方案創建它們,並根據@Environment(\.colorScheme)
有條件地顯示在視圖中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.