程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了iOS 14 小部件 - getTimeline - 检测明暗模式大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

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

开发过程中遇到iOS 14 小部件 - getTimeline - 检测明暗模式的问题如何解决?下面主要结合日常开发的经验,给出你关于iOS 14 小部件 - getTimeline - 检测明暗模式的解决方法建议,希望对你解决iOS 14 小部件 - getTimeline - 检测明暗模式有所启发或帮助;

在我的 iOS14 小部件中,我需要检测系统的明暗模式,因为基于此,我在时间轴创建过程中进行了不同的操作。

我试过了

struct WidgetProvIDer: IntentTimelineProvIDer {

    @Environment(\.colorscheR_980_11845@E) var colorscheR_980_11845@e

    func getTimeline(
       for configuration: MyConfigurationIntent,in context: Context,completion: @escaPing (Timeline<Entry>) -> VoID
    ) {
        //colorscheR_980_11845@e is never equal to .dark
    }
}

如果我使用 let darkmode = uiTraitcollection.current.userInterfaceStyle == .dark 而不是 colorscheR_980_11845@e,它可以工作,但只有一次。如果我更改模式并重新加载小部件,它仍然使用旧的颜色模式。

如何正确检测模式?

解决方法

首先,@Environment 变量只能在 SwiftUI 视图中使用。您不能在 IntentTimelineProvider 中使用它们。

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

let darkmode = UITraitCollection.current.userInterfaceStyle == .dark

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

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

  • update Widget when appearance changes

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

大佬总结

以上是大佬教程为你收集整理的iOS 14 小部件 - getTimeline - 检测明暗模式全部内容,希望文章能够帮你解决iOS 14 小部件 - getTimeline - 检测明暗模式所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:-14小部件