Я обновил свой 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
, но пользователь не может изменить это, конечно.