【问题标题】:Swift force dark/light mode inside an appSwift 在应用程序中强制使用暗/亮模式
【发布时间】:2019-11-18 00:39:32
【问题描述】:

我希望用户按下按钮并强制更改应用内的暗/亮模式, 代码可以工作,但需要按两次按钮才能工作, 奇怪。。。谁能看看?谢谢!

func darkOrLight() {
    let window = UIApplication.shared.keyWindow
    if #available(iOS 13.0, *) {
        if window?.overrideUserInterfaceStyle == .dark {
            window?.overrideUserInterfaceStyle = .light
        } else {
            window?.overrideUserInterfaceStyle = .dark
        }
    } 
}

【问题讨论】:

  • 使用你的调试器。第一次按下按钮时会发生什么?那么第二个会发生什么?
  • 另请注意,keyWindow 在 iOS 13 中已弃用。

标签: ios swift ios13


【解决方案1】:

func darkOrlightMode(){

    if #available(iOS 13.0, *) {

    if UIApplication.shared.keyWindow!.overrideUserInterfaceStyle == .dark {

        UIApplication.shared.keyWindow!.overrideUserInterfaceStyle = .light

    }
    else {

        UIApplication.shared.keyWindow!.overrideUserInterfaceStyle = .dark

    }
    }
}

块引用

【讨论】:

    【解决方案2】:

    问题解决了, 不要使用 overrideUserInterFaceStyle 来检查当前的主题模式,

    if #available(iOS 13.0, *) {
    if UITraitCollection.current.userInterfaceStyle == .dark {
        window?.overrideUserInterfaceStyle = .light
    }
    else {
        window?.overrideUserInterfaceStyle = .dark
    }
    

    }

    【讨论】:

    • 这似乎不是你想要的。这会将窗口的样式设置为与设备的样式相反。这不会切换当前窗口覆盖。
    • @rmaddy 现在我按下按钮将在暗/亮模式之间切换,但是是的,正如您所说,它没有覆盖默认样式,下次打开应用程序仍将使用设备的样式。有什么保持变化的建议吗? :)
    【解决方案3】:

    此代码假定仅有的两个值是darklight。但初始UIUserInterfaceStyle 值为unspecified,在这种情况下它使用当前系统设置。

    与其在您的应用中使用“深色”与“浅色”,不如考虑为它们提供三种选择:“深色”、“浅色”和“系统默认值”。

    【讨论】:

      猜你喜欢
      • 2022-12-09
      • 2022-12-07
      • 2018-12-22
      • 2020-01-02
      • 2021-05-27
      • 2021-09-12
      • 2020-03-18
      • 2020-10-20
      • 1970-01-01
      相关资源
      最近更新 更多