【发布时间】:2020-12-02 08:59:42
【问题描述】:
我发现,当将应用程序置于后台时,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 在将应用程序放入后台时被调用两次。
【问题讨论】:
标签: ios objective-c ios-darkmode