¿Es posible desactivar el modo oscuro en iOS 13?
Una gran parte de mi aplicación consta de vistas web para proporcionar funciones que aún no están disponibles a través de implementaciones nativas. El equipo web no tiene planes de implementar un tema oscuro para el sitio web. Como tal, mi aplicación se verá un poco mitad/mitad con soporte para Modo Oscuro en iOS 13.
¿Es posible desactivar la compatibilidad con el modo oscuro de modo que nuestra aplicación siempre muestre el modo claro para que coincida con el tema del sitio web?
Primero, aquí está la entrada de Apple relacionada con la exclusión voluntaria del modo oscuro. El contenido de este enlace está escrito para Xcode 11 y iOS 13 :
Aplicación completa a través del archivo info.plist (Xcode 12)
Utilice la siguiente clave en su archivo info.plist:
UIUserInterfaceStyle
Y asígnale un valor de Light
.
El XML para la UIUserInterfaceStyle
tarea:
<key>UIUserInterfaceStyle</key>
<string>Light</string>
Documentación de Apple para UIUserInterfaceStyle
Aplicación completa a través de info.plist en la configuración de compilación (Xcode 13)
Ventana completa de la aplicación a través de la propiedad de la ventana
Puede configurarlo overrideUserInterfaceStyle
con la window
variable de la aplicación. Esto se aplicará a todas las vistas que aparecen dentro de la ventana. Esto estuvo disponible con iOS 13, por lo que para las aplicaciones que admiten versiones anteriores, debe incluir una verificación de disponibilidad.
Dependiendo de cómo se creó su proyecto, esto puede estar en el archivo AppDelegate
o SceneDelegate
.
if #available(iOS 13.0, *) {
window?.overrideUserInterfaceStyle = .light
}
UIViewController o UIView individual
Puede compararlo overrideUserInterfaceStyle
con la variable UIViewController
s o UIView
's overrideUserInterfaceStyle
. Esto estuvo disponible con iOS 13, por lo que para las aplicaciones que admiten versiones anteriores, debe incluir una verificación de disponibilidad.
Rápido
override func viewDidLoad() {
super.viewDidLoad()
// overrideUserInterfaceStyle is available with iOS 13
if #available(iOS 13.0, *) {
// Always adopt a light interface style.
overrideUserInterfaceStyle = .light
}
}
Para esas pobres almas en Objective-C
if (@available(iOS 13.0, *)) {
self.overrideUserInterfaceStyle = UIUserInterfaceStyleLight;
}
Cuando se compara con UIViewController
, el controlador de vista y sus hijos adoptan el modo definido.
Cuando se compara con UIView
, la vista y sus hijos adoptan el modo definido.
Documentación de Apple para overrideUserInterfaceStyle
Vistas individuales a través de SwiftUI View
Puede configurarlo preferredColorScheme
como light
o dark
. El valor proporcionado establecerá el esquema de color para la presentación.
import SwiftUI
struct ContentView: View {
var body: some View {
Text("Light Only")
.preferredColorScheme(.light)
}
}
Documentación de Apple para preferidoColorScheme
Crédito a @Aron Nelson , @Raimundas Sakalauskas , @NSLeader y @rmaddy por mejorar esta respuesta con sus comentarios.
Según la sesión de Apple sobre "Implementación del modo oscuro en iOS" ( https://developer.apple.com/videos/play/wwdc2019/214/ a partir del 31:13) es posible configurar overrideUserInterfaceStyle
en UIUserInterfaceStyleLight
o UIUserInterfaceStyleDark
en cualquier controlador de vista o vista. , que se utilizará en traitCollection
cualquier subvista o controlador de vista.
Como ya mencionó SeanR, puede configurar UIUserInterfaceStyle
en Light
o Dark
en el archivo plist de su aplicación para cambiar esto para toda su aplicación.
Si no está utilizando Xcode 11 o posterior (es decir, iOS 13 o SDK posterior), su aplicación no ha optado automáticamente por admitir el modo oscuro. Por lo tanto, no es necesario desactivar el modo oscuro.
Si está utilizando Xcode 11 o posterior, el sistema ha habilitado automáticamente el modo oscuro para su aplicación. Hay dos métodos para desactivar el modo oscuro según sus preferencias. Puede deshabilitarlo por completo o deshabilitarlo para cualquier ventana, vista o controlador de vista específico.
Desactive el modo oscuro por completo para su aplicación
Puede desactivar el modo oscuro incluyendo la UIUserInterfaceStyle
clave con un valor como Light
en el archivo Info.plist de su aplicación.
Esto ignora las preferencias del usuario y siempre aplica una apariencia ligera a su aplicación.
Deshabilite el modo oscuro para Ventana, Vista o Controlador de vista
Puede forzar que su interfaz aparezca siempre en un estilo claro u oscuro configurando la overrideUserInterfaceStyle
propiedad de la ventana, vista o controlador de vista apropiado.
Ver controladores:
override func viewDidLoad() {
super.viewDidLoad()
/* view controller’s views and child view controllers
always adopt a light interface style. */
overrideUserInterfaceStyle = .light
}
Puntos de vista:
// The view and all of its subviews always adopt light style.
youView.overrideUserInterfaceStyle = .light
Ventana:
/* Everything in the window adopts the style,
including the root view controller and all presentation controllers that
display content in that window.*/
window.overrideUserInterfaceStyle = .light
Nota: Apple recomienda encarecidamente admitir el modo oscuro en su aplicación. Por lo tanto, sólo puedes desactivar el modo oscuro temporalmente.
Lea más aquí: Elegir un estilo de interfaz específico para su aplicación iOS
Actualización de Xcode 12 y iOS 14. Probé las opciones anteriores para desactivar el modo oscuro y esta oración en el archivo info.plist no me funciona:
<key>UIUserInterfaceStyle</key>
<string>Light</string>
Ahora pasa a llamarse:
<key>Appearance</key>
<string>Light</string>
Esta configuración bloqueará todo el modo oscuro en la aplicación completa.
EDITADO:
Se corrigió el error tipográfico gracias a @sarah.
********** La forma más fácil para Xcode 11 y superior ***********
Agregue esto a info.plist antes</dict></plist>
<key>UIUserInterfaceStyle</key>
<string>Light</string>