微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

iOS 14 小部件 - getTimeline - 检测明暗模式

如何解决iOS 14 小部件 - getTimeline - 检测明暗模式

在我的 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 变量只能在 SwiftUI 视图中使用。您不能在 IntentTimelineProvider 中使用它们。

然后,您正确地尝试了另一种检测 colorScheme 的方法:

let darkMode = UITraitCollection.current.userInterfaceStyle == .dark

问题在于,当您更改外观时,条目(和时间线本身)不会重新生成。仅重绘视图

最好的方法是直接在视图中使用 @Environment(\.colorScheme)。看到这个答案:

如果您确实需要在时间线中创建颜色方案相关变量,我建议您为两种颜色方案创建它们并根据 @Environment(\.colorScheme) 在视图中有条件地显示。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。