Можно ли вручную установить / переключить режим UserInterfaceStyle / Dark для каждого приложения? - PullRequest
1 голос
/ 11 октября 2019

Я обновил свой iOS 11+ для поддержки темного режима при использовании на iOS 13. Это прекрасно работает, когда режим UserInterfaceStyle / Dark включен или отключен в настройках устройства.

Однако я бы хотелчтобы дать пользователям возможность активировать / деактивировать Dark Mode только для моего приложения.

Использование переключателя для переопределения / переключения UserInterfaceStyle текущего окна приложения не представляет особой проблемы:

if #available(iOS 13.0, *) {
    for window in UIApplication.shared.windows {
        window.overrideUserInterfaceStyle = (uiStyleSwitch.isOn ? .dark : .light)
    }
}

Но этот подход имеет two один недостаток s :

  • Я бы хотел переключиться между темным режимом, светлым режимом и настройками системы, где первые два форсируют один режим илидругой по текущим системным настройкам, а третий использует системные настройки. Но как вернуться к «использованию системных настроек» после установки overrideUserInterfaceStyle? Использование .unspecified, кажется, работает, но поведение на самом деле не задокументировано. Это сохранить, чтобы использовать? Может быть решена с помощью .uspecified (см. Комментарии)

  • Это работает только для текущих доступных окон. Однако различные сторонние элементы управления и библиотеки создают свои собственные окна (например, для отображения всплывающих сообщений, всплывающих окон и т. Д.). Поскольку я не могу контролировать создание этих окон, я не могу переопределить их стиль.

Итак, вопрос таков: возможно ли динамически переопределить UserInterfaceStyle для всего приложения?

Я знаю, что могу выбрать стильв Info.plist, но пользователь не может изменить это, конечно.

1 Ответ

2 голосов
/ 11 октября 2019

Используйте .unspecified, чтобы вернуться к системным настройкам стиля интерфейса.

Выберите эту опцию, если хотите следовать стилю интерфейса системы

Что касается другой части вашего вопроса, то, вероятно, это будет зависеть от того, что представлено и к каким обратным вызовам вы можете получить доступ.

...