簡體   English   中英

為什么我的 iOS 應用程序不禁用深色模式?

[英]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 會導致系統忽略用戶的偏好並始終為您的應用程序應用淺色外觀。

沒有改變

Apple 文檔:為您的 iOS 應用選擇特定的界面風格

如果有人知道我如何將我的應用程序設置為僅在輕模式下......我將非常感激:D

只需在應用程序info.plist中添加一個新鍵UIUserInterfaceStyle (注意:Xcode 12 及更高版本已重命名為Appearance )並將其值設置為Light or Dark 這會將應用默認樣式覆蓋為您提供的值。

所以你不必費心在其他任何地方擁有它

if #available(iOS 13, *) {
    window.overrideUserInterfaceStyle = .light
}

應該管用。 AppDelegatedidFinishLaunchingWithOptions中調用它。

更改 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM