Я нашел ответ на WWDC 2019 - Сессия 214 около 23: 30.
Как я и ожидал, эта функция часто вызывается, в том числе и при изменении цвета.Наряду со многими другими функциями для ViewController
и presentationController
.Но есть специальная функция, разработанная для этого, которая имеет похожую подпись во всех View
представителях.
Посмотрите на это изображение из этого сеанса:
Серый: вызов, но не подходит для моей проблемы, Зеленый: предназначен для этого
Поэтому я должен вызвать его и проверить его внутри этой функции:
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
if traitCollection.hasDifferentColorAppearance(comparedTo: previousTraitCollection) {
dropShadowIfNeeded()
}
}
Это гарантирует, что вызов будет вызываться только один раз за изменение.