So... I've tried to set my app to disable iOS 13 dark mode by forcing light mode according apple documentation, in the emulator all attempts work fine, but when I try on the real device, nothing happens, it's like I've never changed my code
First Attempt
Override the Interface Style for a Window, View, or View Controller
I tried to put this code sample in my viewDidLoad()
Nothing Changed
if #available(iOS 13.0, *) {
overrideUserInterfaceStyle = .light
} else {
// Fallback on earlier versions
}
Second Attempt
Opt Out of Dark Mode Entirely
The system automatically opts in any app linked against the iOS 13.0 or later SDK to both light and dark appearances. If you need extra time to work on your app's Dark Mode support, you can temporarily opt out by including the UIUserInterfaceStyle key (with a value of Light) in your app's Info.plist file. Setting this key to Light causes the system to ignore the user's preference and always apply a light appearance to your app.
Nothing changed
Apple Documentation: Choosing a Specific Interface Style for Your iOS App
If anyone knows how I set my app only in light mode... I'll be very grateful:D
Simply you can add a new key UIUserInterfaceStyle
in your app info.plist (Notes: Xcode 12 and above has renamed to Appearance
) and set its value to Light or Dark
. this will override the app default style to the value you provide.
so you don't need to bother about having it anywhere else
if #available(iOS 13, *) {
window.overrideUserInterfaceStyle = .light
}
Should work. Call it in your AppDelegate
's didFinishLaunchingWithOptions
.
Change the window UserInterfaceStyle for iOS 13+ version. Just set
UIApplication.shared.changeStatusBarStyle(.light)
or
UIApplication.shared.changeStatusBarStyle(.dark)
after changing window every time.
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
}
}
}
If any confusion please let me know.
Add inside Info.plist
<key>Appearance</key>
<string>Light</string>
For SwiftUI you might find the following solution helpful:
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
}
}
}
Usage:
Button("Dark") {
UIApplication.shared.changeInterfaceStyle(.dark)
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.