如何解决仅在进入后台时,多次调用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
,以避免在进入后台时拍摄应用快照时做事
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。