仅在进入后台时,多次调用traitCollectionDidChange

问题描述

我发现,当将应用程序置于后台时,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,UserInterfaceStyle = Dark,UserInterfaceLevel = Base>

第二个触发器:

previousTraitCollection:

<UITraitCollection: 0x28023b600; UserInterfaceIdiom = Phone,UserInterfaceLevel = Base>

self.traitCollection:

<UITraitCollection: 0x28027d800; UserInterfaceIdiom = Phone,UserInterfaceLevel = Base>

现在在第二个触发器上,特征收集已被反转,但仍然不同。在这种情况下,第一个特征集和最后一个特征集是正确的。

这是Apple的错误吗?为什么只是将应用程序置于后台时,traitCollectionDidChange被调用两次。

解决方法

欢迎!

这实际上是一项功能:iOS正在为应用程序UI制作多个快照,这些快照将显示在应用程序切换器中。而且由于用户可以在您的应用程序处于后台时更改为暗模式,因此iOS会以两种界面样式进行快照,以始终显示正确的界面样式。

,

检查是否UIApplication.shared.applicationState != .background,以避免在进入后台时拍摄应用快照时做事

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...