[英]Why doesn't my iOS app disable dark mode?
所以...我嘗試將我的應用程序設置為根據蘋果文檔通過強制亮模式來禁用 iOS 13 暗模式,在模擬器中所有嘗試都工作正常,但是當我在真實設備上嘗試時,沒有任何反應,就像我'我從未更改過我的代碼
第一次嘗試
覆蓋 Window、視圖或視圖 Controller 的界面樣式
我試圖將此代碼示例放入我的 viewDidLoad()
沒有改變
if #available(iOS 13.0, *) {
overrideUserInterfaceStyle = .light
} else {
// Fallback on earlier versions
}
第二次嘗試
完全退出黑暗模式
系統會自動選擇與 iOS 13.0 或更高版本 SDK 鏈接的任何應用程序,以顯示淺色和深色外觀。 如果您需要額外的時間來處理應用程序的深色模式支持,您可以通過在應用程序的 Info.plist 文件中包含 UIUserInterfaceStyle 鍵(值為 Light)來暫時選擇退出。 將此鍵設置為 Light 會導致系統忽略用戶的偏好並始終為您的應用程序應用淺色外觀。
沒有改變
如果有人知道我如何將我的應用程序設置為僅在輕模式下......我將非常感激:D
只需在應用程序info.plist中添加一個新鍵UIUserInterfaceStyle
(注意:Xcode 12 及更高版本已重命名為Appearance
)並將其值設置為Light or Dark
。 這會將應用默認樣式覆蓋為您提供的值。
所以你不必費心在其他任何地方擁有它
if #available(iOS 13, *) {
window.overrideUserInterfaceStyle = .light
}
應該管用。 在AppDelegate
的didFinishLaunchingWithOptions
中調用它。
更改 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)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.