¿Es posible desactivar el modo oscuro en iOS 13?

Resuelto SeanR asked hace 54 años • 30 respuestas

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?

SeanR avatar Jan 01 '70 08:01 SeanR
Aceptado

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 UIUserInterfaceStyletarea:

<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)

ingrese la descripción de la imagen aquí


Ventana completa de la aplicación a través de la propiedad de la ventana

Puede configurarlo overrideUserInterfaceStylecon la windowvariable 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 AppDelegateo SceneDelegate.

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

UIViewController o UIView individual

Puede compararlo overrideUserInterfaceStylecon la variable UIViewControllers 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 preferredColorSchemecomo lighto 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.

CodeBender avatar Jun 11 '2019 14:06 CodeBender

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 overrideUserInterfaceStyleen UIUserInterfaceStyleLighto UIUserInterfaceStyleDarken cualquier controlador de vista o vista. , que se utilizará en traitCollectioncualquier subvista o controlador de vista.

Como ya mencionó SeanR, puede configurar UIUserInterfaceStyleen Lighto Darken el archivo plist de su aplicación para cambiar esto para toda su aplicación.

dorbeetle avatar Jun 11 '2019 14:06 dorbeetle

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 UIUserInterfaceStyleclave con un valor como Lighten el archivo Info.plist de su aplicación. Esto ignora las preferencias del usuario y siempre aplica una apariencia ligera a su aplicación.
UIUserInterfaceStyle como luz

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 overrideUserInterfaceStylepropiedad 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

Ajith Renjala avatar Sep 23 '2019 12:09 Ajith Renjala

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.

Diego Jiménez avatar Sep 22 '2020 17:09 Diego Jiménez

********** 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>
Kingsley Mitchell avatar Oct 08 '2019 05:10 Kingsley Mitchell