Как изменить стиль темы (Стиль интерфейса пользователя) сразу в Swift в iOS 13 - PullRequest
2 голосов
/ 28 октября 2019

Я использую Swift 5.1 и Xcode 11.1, и в настоящее время я завершил реализацию Темный режим дизайн.

В приложении есть настройка, в которой пользователь может установить тему отображения ( Светлый , Dark , System Default ) и в настоящее время работает нормально, если приложение перезапускается после выбора пользователем темы (я сохраняю эти данные bool в UserDefaults и задаю UIAppearance при запуске приложения в файле AppDelegate)

Вот мой код

if #available(iOS 13.0, *) {
   switch AppState.appThemeStyle {
   case "dark":
       window?.overrideUserInterfaceStyle = .dark
       break
   case "light":
       window?.overrideUserInterfaceStyle = .light
       break
   default:
       window?.overrideUserInterfaceStyle = .unspecified
   }
}

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

Я думаю, что перезапускать приложение не очень хорошая идеятолько изменение темы и тема должна меняться сразу после того, как пользователь установил стиль темы.

Я попытался сделать это, установив базовый viewcontroller и установив стиль интерфейса пользователя на ViewWillAppear, но внешний вид панели навигации и панели вкладок не изменился.

Может кто-нибудь сказать, пожалуйста, как с этим справиться? Спасибо.

Ответы [ 2 ]

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

Этот код мгновенный, и нет необходимости перезапускать приложение!

Вам просто нужно вызвать код для взаимодействия с пользователем с шаблоном наблюдатель уведомлений или напрямую вызвать функцию, подобную этой:

// Because you are using AppDelegate for this: (But it is going to be deprecated. read the following Note)
(UIApplication.shared.delegate as! AppDelegate).myFunctionThatChangesTheUserInterfaceStyle()

Также обратите внимание, что начиная с iOS 13, окно ключа больше не является частью appDelegate, и вы должны получить доступ к нему из sceneDelegate

1 голос
/ 28 октября 2019

Мы можем немедленно изменить стиль пользовательского интерфейса, установив overrideUserInterfaceStyle. Я добавил этот код, где пользователь может выбрать стиль темы.

guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
   return
}
appDelegate.changeTheme(themeVal)

Надеюсь, это поможет другим

...