所有这些都是从关于collectionView单元格宽度的许多警告开始的, 每当我按下主屏幕按钮时,该内容就会写入控制台。
我认为这与细胞大小有关,并试图对其进行修复。 仅在进行一些测试之后,我才注意到viewDidLayoutView是用错误的view.bounds调用的,这使collectionView单元比宽度更大(在宽度上)。
现在,我的解决方法是检查应用程序是否处于后台状态,并忽略viewDidLayoutView。
答案 0 :(得分:1)
为什么仅在iPad上而不在iPhone上发生?
因为当您在iPad上单击“主页”并且该应用程序进入后台时,运行时会拍摄两个快照,每个方向一个快照,以便在App Switcher界面中使用(并为该应用程序回到前端做准备) )。这意味着它必须旋转应用程序,这会触发布局,因此您的viewDidLayoutSubviews
被调用。
直到现在我才看到这种情况。这是iOS的新功能吗? 处理此问题的正确方法是什么?我不使用自动版式 它的调用范围错误,我不想只为用户返回同一方向而计算所有单元格的帧。 我进食就像我在这里缺少一些非常基本的东西,或者我不知道iOS上的某些更改一样。
很长一段时间以来,iPad的行为一直如此。解释为什么您没有注意到我不是我的工作。基本上,您不应该在viewDidLayoutSubviews
中做任何耗时的事情。
现在,我的解决方法是检查应用程序是否处于后台状态,并忽略viewDidLayoutView
那是完全合理的。我做同样的事情。例如(这是一种不同的方法,但是是相同的想法):
override func viewWillTransition(to size: CGSize, with tc: UIViewControllerTransitionCoordinator) {
if UIApplication.shared.applicationState == .background {
return
}
// ...
}
但是请注意,如果您正在执行手动布局,并且当应用程序进入后台时没有执行该操作,则您的App Switcher快照可能看起来不正确。同样,您没有使用自动布局的事实也是一个危险信号。您可能应该使用它。