use*_*951 0 ipad ios viewdidlayoutsubviews
这一切都是从许多关于 collectionView 单元格宽度的警告开始的,每次我按主页按钮时都会写入控制台。
我认为这是细胞大小的问题并尝试修复它。仅经过一些测试,我注意到 viewDidLayoutView 被调用时使用了错误的 view.bounds,这使得 collectionView 单元格(宽度)比 collection view 更大。
目前,我的解决方法是检查应用程序是否处于后台状态并忽略 viewDidLayoutView。
为什么它只发生在 iPad 上而不是 iPhone 上?
因为当您单击 iPad 上的“主页”并且应用程序进入后台时,运行时会拍摄两张快照,每个方向一张,以便在应用程序切换器界面中使用(并为应用程序返回前台时做好准备)。这意味着它必须旋转应用程序,这会触发布局,因此您的viewDidLayoutSubviews
被调用。
令人惊讶的是,直到现在我才看到这一切发生。这是 iOS 中的新东西吗?处理这个问题的正确方法是什么?我不使用错误边界的自动布局调用,并且我不想计算所有单元格框架只是为了用户返回到相同的方向。我觉得我错过了一些非常基本的东西,或者 iOS 上有一些我不知道的变化。
嗯,iPad 的这种行为已经有很长一段时间了。我的工作不是解释为什么你没有注意到。基本上你不应该在viewDidLayoutSubviews
.
目前,我的解决方法是检查应用程序是否处于后台状态并忽略 viewDidLayoutView
这是完全合理的。我也做同样的事情。例如(这是一种不同的方法,但它是相同的想法):
override func viewWillTransition(to size: CGSize, with tc: UIViewControllerTransitionCoordinator) {
if UIApplication.shared.applicationState == .background {
return
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
但请注意,如果您正在执行手动布局,并且在应用程序进入后台时没有执行此操作,则您的应用程序切换器快照可能看起来错误。另外,您没有使用自动布局这一事实是一个危险信号。你可能应该使用它。