簡體   English   中英

iOS 14 小部件 - getTimeline - 檢測明暗模式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM