Я обнаружил, что при переводе приложения в фоновый режим метод traitCollectionDidChange вызывается дважды и показывает, что коллекции признаков различаются, хотя на самом деле никаких изменений не было.
- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection;
Чтобы выяснить, был ли стиль внешнего вида переключен между светлым и темным режимами, мы использовали метод hasDifferentColorAppearanceComparedToTraitCollection.
BOOL hasUserInterfaceStyleChanged = [previousTraitCollection
hasDifferentColorAppearanceComparedToTraitCollection:self.traitCollection];
Проблема в том, что это всегда так, и по какой-то причине коллекции признаков различаются, когда ничего не менялось. См. Ниже. UserInterfaceStyle на самом деле отличается, хотя на самом деле это не так.
Первый триггер:
previousTraitCollection:
<UITraitCollection: 0x280228c00; UserInterfaceIdiom = Phone, DisplayScale = 2, DisplayGamut = P3, HorizontalSizeClass = Compact, VerticalSizeClass = Regular, UserInterfaceStyle = Light, UserInterfaceLayoutDirection = LTR, ForceTouchCapability = Unavailable, PreferredContentSizeCategory = L, AccessibilityContrast = Normal, UserInterfaceLevel = Base>
self.traitCollection:
<UITraitCollection: 0x28023b600; UserInterfaceIdiom = Phone, DisplayScale = 2, DisplayGamut = P3, HorizontalSizeClass = Compact, VerticalSizeClass = Regular, UserInterfaceStyle = Dark, UserInterfaceLayoutDirection = LTR, ForceTouchCapability = Unavailable, PreferredContentSizeCategory = L, AccessibilityContrast = Normal, UserInterfaceLevel = Base>
Второй триггер:
previousTraitCollection:
<UITraitCollection: 0x28023b600; UserInterfaceIdiom = Phone, DisplayScale = 2, DisplayGamut = P3, HorizontalSizeClass = Compact, VerticalSizeClass = Regular, UserInterfaceStyle = Dark, UserInterfaceLayoutDirection = LTR, ForceTouchCapability = Unavailable, PreferredContentSizeCategory = L, AccessibilityContrast = Normal, UserInterfaceLevel = Base>
self.traitCollection:
<UITraitCollection: 0x28027d800; UserInterfaceIdiom = Phone, DisplayScale = 2, DisplayGamut = P3, HorizontalSizeClass = Compact, VerticalSizeClass = Regular, UserInterfaceStyle = Light, UserInterfaceLayoutDirection = LTR, ForceTouchCapability = Unavailable, PreferredContentSizeCategory = L, AccessibilityContrast = Normal, UserInterfaceLevel = Base>
По второму триггеру теперь наборы черт были отменены, но все еще различаются. В этом сценарии правильными являются самый первый набор признаков и самый последний набор признаков.
Это ошибка Apple? Почему traitCollectionDidChange вызывается дважды, когда приложение просто переводится в фоновый режим.