【问题标题】:Possible to reload app when dark/light mode changes?暗/亮模式更改时可以重新加载应用程序吗?
【发布时间】:2020-02-20 23:58:58
【问题描述】:

我的应用广泛使用了 CAGradientLayers,当切换暗/亮模式时,它们显然不会自动更新其颜色。当应用程序关闭并重新打开时,它们会更新颜色。

我知道我可以使用以下代码来检测更改并单独重新加载每个视图

 override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
        // 
    }

但是,我正在寻找不需要我单独更新每个视图的修复程序。有没有办法检测亮/暗模式更改(可能在应用程序委托内)并强制整个应用程序重新加载(好像它已被强制关闭并重新打开)?

【问题讨论】:

  • 不清楚您可能会问什么。 “强制整个应用程序自行重新加载”是什么意思? “快速修复”是什么意思?没有什么需要修复的,一切都很快。您收到traitCollectionDidChange,您使用备用颜色集重新绘制渐变。 Apple 在 WWDC 2019 视频中对此主题进行了详尽的解释。
  • developer.apple.com/videos/play/wwdc2019/214/?time=1393 完全解释了这一点,所以请观看它。

标签: ios swift ios13 ios-darkmode


【解决方案1】:

没有办法以这种方式“重新加载您的应用程序”。出现问题是因为CAGradientLayer 使用了CGColor,它不会动态适应系统样式。

我通过在实现traitCollectionDidChange 的渐变层周围包裹UIView 解决了这个问题,以相应地更新渐变的颜色。也许您可以这样做,并将其用作子视图而不是子图层。

【讨论】:

    【解决方案2】:

    你可以创建一个覆盖traitCollectionDidChange的超类UIViewController

    【讨论】:

      猜你喜欢
      • 2018-06-13
      • 2013-01-29
      • 2012-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-04
      • 1970-01-01
      相关资源
      最近更新 更多