【问题标题】:Why doesn't my iOS app disable dark mode?为什么我的 iOS 应用没有禁用暗模式?
【发布时间】:2020-02-24 19:27:40
【问题描述】:

所以...我尝试根据苹果文档通过强制亮模式将我的应用程序设置为禁用 iOS 13 暗模式,在模拟器中所有尝试都可以正常工作,但是当我在真实设备上尝试时,没有任何反应,这是就像我从未更改过我的代码一样

第一次尝试

覆盖窗口、视图或视图控制器的界面样式

我尝试将此代码示例放入我的 viewDidLoad() 中

没有任何变化

if #available(iOS 13.0, *) {
   overrideUserInterfaceStyle = .light
} else {
  // Fallback on earlier versions
}

第二次尝试

完全退出黑暗模式

系统会自动选择任何与 iOS 13.0 或更高版本 SDK 相关联的应用,以提供浅色和深色外观。如果您需要额外的时间来处理应用程序的暗模式支持,您可以通过在应用程序的 Info.plist 文件中包含 UIUserInterfaceStyle 键(值为 Light)来暂时退出。将此键设置为 Light 会导致系统忽略用户的偏好并始终为您的应用应用浅色外观。

没有任何改变

Apple Documentation: Choosing a Specific Interface Style for Your iOS App

如果有人知道我如何将我的应用设置为仅在灯光模式下...我将不胜感激:D

【问题讨论】:

  • 您在问题中发布的所有内容都是正确的。你甚至说它可以在模拟器中工作。真实设备上的问题可能是应用程序实际上并未更新。从设备中删除您的应用程序,然后通过 Xcode 重新安装。它现在是否像在模拟器中一样工作?

标签: ios swift ios13 xcode11 ios-darkmode


【解决方案1】:

您只需在您的应用 info.plist 中添加一个新密钥 UIUserInterfaceStyle(注意:Xcode 12 及更高版本已重命名为 Appearance) 并将其值设置为 Light or Dark。这会将应用默认样式覆盖为您提供的值。

因此您无需费心将其放在其他任何地方

【讨论】:

  • 当我在模拟器中运行我的应用程序时,这个解决方案工作正常,但在真实设备中,没有任何改变
  • 尝试先从设备上卸载应用程序并检查您是否使用相同的 info.plist 文件并确保您正在清理项目
  • 这个答案实际上并没有解决问题。 OP 已经在使用 Info.plist 键。至少用需要删除并重新安装应用程序的实际解决方案重做答案。
  • 确保值为Light,而不是light(区分大小写)
  • 这快把我逼疯了。我检查了“Light”的情况,清理了项目,从模拟器和真实设备中删除了它,但没有什么能阻止应用程序进入设置了暗模式的暗模式。 info.plist 清楚地识别“外观”属性
【解决方案2】:
if #available(iOS 13, *) {
    window.overrideUserInterfaceStyle = .light
}

应该可以。在您的AppDelegatedidFinishLaunchingWithOptions 中调用它。

【讨论】:

  • 但在 iOS 13 下,您的应用窗口不会在应用委托中,而是在场景委托中,除非您完全退出场景。
【解决方案3】:

为 iOS 13+ 版本更改窗口 UserInterfaceStyle。只需设置

UIApplication.shared.changeStatusBarStyle(.light)

UIApplication.shared.changeStatusBarStyle(.dark)

每次更换窗口后。

extension UIApplication {

        enum StatusColor {

            case dark, light
        }

        func changeStatusBarStyle(_ mode: StatusColor = .light) {

            if #available(iOS 13.0, *) {

                guard let appDelegate = delegate as? AppDelegate else { return }

                var interfaceStyle: UIUserInterfaceStyle

                switch mode {
                case .dark:
                    interfaceStyle = .dark
                default:
                    interfaceStyle = .light
                }

                appDelegate.window?.overrideUserInterfaceStyle = interfaceStyle
            }
        }
    }

如果有任何困惑,请告诉我。

【讨论】:

    【解决方案4】:

    添加到 Info.plist

    <key>Appearance</key>
    <string>Light</string>
    

    【讨论】:

      猜你喜欢
      • 2020-02-04
      • 2011-04-07
      • 2018-04-19
      • 2020-01-31
      • 1970-01-01
      • 1970-01-01
      • 2020-07-25
      • 2013-05-06
      • 1970-01-01
      相关资源
      最近更新 更多