我的应用程序有一个错误。这个错误的原因是 UIViewController 在 UI 主题从浅色变为深色或从深色变为深色后更新 UITableView
单元格。
我可以修复这个bug,这个bug本身不是问题。
但是,我注意到一些奇怪的行为。当我最小化我的应用程序时,两者
func willTransition(to newCollection: UITraitCollection, with coordinator: UIViewControllerTransitionCoordinator)
和
func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?)
被调用两次。我没有更改 UI 主题,但是当我将以下代码添加到我的 UIViewController
override func willTransition(to newCollection: UITraitCollection, with coordinator: UIViewControllerTransitionCoordinator)
{
super.willTransition(to: newCollection, with: coordinator)
Swift.print("Changing to", newCollection.userInterfaceStyle == .dark ? "dark" : "light", "mode.")
}
我得到以下输出:
Changing to dark mode.
Changing to light mode.
就像我说的,我所做的只是最小化我的应用程序(按下主页按钮)。当实际更改 UI 主题时,它只会被调用一次,这很好。
我将在重新加载我的 UITableView
之前检查实际状态(即仅在应用程序状态处于非事件状态时重新加载它,这是使用通知中心更改 UI 主题时的状态),但我我只是好奇。这对我来说似乎是一个错误。
为什么在最小化应用程序时会触发两次委托(delegate)?
最佳答案
这是故意的。正如您可能知道的那样,iOS 会在退出应用程序之前截取屏幕截图,以便在通过应用程序切换器(多任务处理)时显示。自 iOS 13 以来,它在两种暗光模式下都截取了屏幕截图,因此非常简单地更改了特征集合。这样做是为了当用户在明暗模式之间切换时,应用程序切换器中的屏幕截图也会更新(您可以查看)。您应该优化您的应用以适应这种行为。
关于swift - 最小化应用程序时避免调用 traitCollectionDidChange,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61917882/