为什么我的 iOS 应用程序不禁用深色模式?
Why doesn't my iOS app disable dark mode?
所以...我尝试根据苹果文档通过强制亮模式来设置我的应用程序以禁用 iOS 13 暗模式,在模拟器中所有尝试都工作正常,但是当我尝试真实设备,没有任何反应,就像我从未更改过我的代码
第一次尝试
覆盖 Window、视图或视图控制器的界面样式
我试图将此代码示例放入我的 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
if #available(iOS 13, *) {
window.overrideUserInterfaceStyle = .light
}
应该可以。在你的 AppDelegate
的 didFinishLaunchingWithOptions
.
中调用它
只需在您的应用程序中添加一个新密钥UIUserInterfaceStyle
info.plist(注意:Xcode12及以上已重命名为Appearance
)并将其值设置为Light or Dark
。这会将应用默认样式覆盖为您提供的值。
因此您无需为将它放在其他地方而烦恼
为 iOS 13+ 版本更改 window UserInterfaceStyle。只需设置
UIApplication.shared.changeStatusBarStyle(.light)
或
UIApplication.shared.changeStatusBarStyle(.dark)
每次更改后window。
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
}
}
}
如果有任何困惑,请告诉我。
内加Info.plist
<key>Appearance</key>
<string>Light</string>
对于 SwiftUI,您可能会发现以下解决方案很有帮助:
extension UIApplication {
func changeInterfaceStyle(_ mode: UIUserInterfaceStyle = .light) {
if #available(iOS 13.0, *) {
var window: UIWindow? {
guard let scene = connectedScenes.first,
let windowSceneDelegate = scene.delegate as? UIWindowSceneDelegate,
let window = windowSceneDelegate.window else {
return nil
}
return window
}
window?.overrideUserInterfaceStyle = mode
}
}
}
用法:
Button("Dark") {
UIApplication.shared.changeInterfaceStyle(.dark)
}
所以...我尝试根据苹果文档通过强制亮模式来设置我的应用程序以禁用 iOS 13 暗模式,在模拟器中所有尝试都工作正常,但是当我尝试真实设备,没有任何反应,就像我从未更改过我的代码
第一次尝试
覆盖 Window、视图或视图控制器的界面样式
我试图将此代码示例放入我的 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
if #available(iOS 13, *) {
window.overrideUserInterfaceStyle = .light
}
应该可以。在你的 AppDelegate
的 didFinishLaunchingWithOptions
.
只需在您的应用程序中添加一个新密钥UIUserInterfaceStyle
info.plist(注意:Xcode12及以上已重命名为Appearance
)并将其值设置为Light or Dark
。这会将应用默认样式覆盖为您提供的值。
因此您无需为将它放在其他地方而烦恼
为 iOS 13+ 版本更改 window UserInterfaceStyle。只需设置
UIApplication.shared.changeStatusBarStyle(.light)
或
UIApplication.shared.changeStatusBarStyle(.dark)
每次更改后window。
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
}
}
}
如果有任何困惑,请告诉我。
内加Info.plist
<key>Appearance</key>
<string>Light</string>
对于 SwiftUI,您可能会发现以下解决方案很有帮助:
extension UIApplication {
func changeInterfaceStyle(_ mode: UIUserInterfaceStyle = .light) {
if #available(iOS 13.0, *) {
var window: UIWindow? {
guard let scene = connectedScenes.first,
let windowSceneDelegate = scene.delegate as? UIWindowSceneDelegate,
let window = windowSceneDelegate.window else {
return nil
}
return window
}
window?.overrideUserInterfaceStyle = mode
}
}
}
用法:
Button("Dark") {
UIApplication.shared.changeInterfaceStyle(.dark)
}