为啥我的 iOS 应用没有禁用暗模式?

Posted

技术标签:

【中文标题】为啥我的 iOS 应用没有禁用暗模式?【英文标题】: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 重新安装。它现在是否像在模拟器中一样工作? ***.com/questions/56537855/…的可能副本 【参考方案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>

【讨论】:

以上是关于为啥我的 iOS 应用没有禁用暗模式?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 iOS 13 上选择退出暗模式?

如何使用 SwiftUI 将应用程序采用到 iOS 13 暗模式?

如何在模拟器 iOS 12.4 中使用暗模式?

iOS 13 中的暗模式启动屏幕

如何在 React Native 中强制禁用 iOS 暗模式

在 iOS 13 中停止更改状态栏