为什么只在iPad而不是iPhone上发生?
因为当你在iPad上点击主页,应用程序进入后台时,运行时会拍摄两张快照,每个方向一张,用于应用程序切换界面(并为应用程序返回前台做准备)。这意味着它必须旋转应用程序,从而触发布局,因此
viewDidLayoutSubviews
被称为。
只是现在我才看到这一切。这是iOS的新功能吗?
处理这个问题的正确方法是什么?我不使用自动布局
它的调用有错误的边界,我不想计算所有的单元格帧,只为用户返回到相同的方向。
我觉得我在这里遗漏了一些非常基本的东西,或者在iOS上有一些我不知道的变化。
好吧,iPad的这种行为已经有很长一段时间了。我的工作不是解释你为什么没有注意到。基本上你不应该在
viewDidLayoutSubviews视图
.
目前,我的修复方法是检查应用程序是否处于后台状态,并忽略viewDidLayoutView
这完全合理。我也做同样的事。例如(这是一种不同的方法,但想法相同):
override func viewWillTransition(to size: CGSize, with tc: UIViewControllerTransitionCoordinator) {
if UIApplication.shared.applicationState == .background {
return
}
// ...
}
不过,请注意,如果您正在进行手动布局,并且在应用程序进入后台时不进行手动布局,则您的应用程序切换程序快照可能会出现错误。另外,您没有使用autolayout这一事实是一个危险信号。你应该用它。