所以。。。根据苹果的文档,我试图通过强制灯光模式将我的应用程序设置为禁用iOS 13暗模式,在模拟器中,所有尝试都很好,但当我在真实设备上尝试时,什么都没有发生,就像我从未更改过我的代码
第一次尝试
覆盖窗口、视图或视图控制器的接口样式
我试着把这个代码示例放在我的viewDidLoad((中
没有任何更改
if #available(iOS 13.0, *) {
overrideUserInterfaceStyle = .light
} else {
// Fallback on earlier versions
}
第二次尝试
完全退出黑暗模式
该系统会自动在任何与iOS 13.0或更高版本SDK链接的应用程序中选择亮显和暗显。如果您需要额外的时间来处理应用程序的暗模式支持,您可以通过在应用程序的Info.plist文件中包含UIUserInterfaceStyle键(值为Light(来暂时选择退出。将此键设置为"浅色"会导致系统忽略用户的偏好,并始终为应用程序应用浅色外观。
没有任何变化
苹果文档:为您的iOS应用程序选择特定的界面样式
如果有人知道我是如何将我的应用程序仅设置为灯光模式的。。。我将非常感激:D
您只需在应用程序info.plist中添加一个新密钥UIUserInterfaceStyle
(注意:Xcode 12及以上版本已重命名为Appearance
(,并将其值设置为Light or Dark
。这将覆盖应用程序默认样式为您提供的值。
所以你不需要为在其他地方使用而烦恼
if #available(iOS 13, *) {
window.overrideUserInterfaceStyle = .light
}
应该有效。把它称为你的AppDelegate
的didFinishLaunchingWithOptions
。
更改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
}
}
}
如果有任何困惑,请告诉我。
在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)
}