为什么我的 iOS 应用程序不禁用暗模式?



所以。。。根据苹果的文档,我试图通过强制灯光模式将我的应用程序设置为禁用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
}

应该有效。把它称为你的AppDelegatedidFinishLaunchingWithOptions

更改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)
}

相关内容

  • 没有找到相关文章

最新更新