Я обновил представления в своем приложении для поддержки темного режима, добавив
if #available(iOS 12.0, *) {
if self.traitCollection.userInterfaceStyle == .dark {
//Adapt to dark Bg
} else {
//Adapt to light Bg
}
}
Затем, чтобы учесть случай, когда пользователь оставляет фон приложения и возвращается к нему после переключения режима, я присоединяю наблюдателя в моем viewDidLoad
if #available(iOS 12.0, *) {
NotificationCenter.default.addObserver(self, selector: #selector(willEnterForeground), name: UIApplication.willEnterForegroundNotification, object: nil)
} else {
// Fallback on earlier versions
}
, который вызывает функцию
@available(iOS 12.0, *)
@objc func willEnterForeground() {
if self.traitCollection.userInterfaceStyle == .dark {
print("App moving to foreground - dark")
//Adapt to dark Bg
} else {
print("App moving to foreground - light")
//Adapt to light Bg
}
}
Тем не менее, self.traitCollection.userInterfaceStyle
по-прежнему дает старое значение, поэтому полная перезагрузка представления требуется, чтобы произвести желаемое обновление для интерфейс. Использование UIApplication.didBecomeActiveNotification
вместо этого не имеет значения.