将应用移至后台,调用 viewDidLayoutSubView 并使用 UICollectionView 创建大量警告
moving app to background, calls viewDidLayoutSubView and create a lot of warnings with UICollectionView
这一切都是从很多关于collectionView单元格宽度的警告开始的,
每次我按下主页按钮时都会写入控制台。
我认为这是与单元格大小有关的问题并尝试修复它。
只有在一些测试之后,我才注意到 viewDidLayoutView 被错误地调用 view.bounds,这使得 collectionView 单元格比集合视图更大(宽度)。
目前,我的解决方法是检查应用程序是否处于后台状态并忽略 viewDidLayoutView。
- 为什么它只发生在 iPad 而不是 iPhone ?
- 很奇怪,我现在才看到这种情况。这是 iOS 中的新内容 ?
- 处理这个问题的正确方法是什么?我不使用自动布局
- 它的调用边界错误,我不想计算所有单元格框架只是为了让用户 return 到相同的方向。
- 我觉得我在这里遗漏了一些非常基本的东西,或者 iOS 有一些我不知道的变化。
why it's happen only in iPad and not on iPhone ?
因为当您在 iPad 上单击“主页”并且应用程序进入后台时,运行时会拍摄两张快照,每个方向各一张,以在 App Switcher 界面中使用(并为当应用程序回到前面)。这意味着它必须旋转应用程序,这会触发布局,因此您的 viewDidLayoutSubviews
被调用。
it's whirred that only now I saw this happening. it's something new in iOS ?
what is the right way to handle this ? I don't use auto-layout
its calling with wrong bounds and I don't want to calculate all cells frames just for the user to return to the same orientation.
I feed like I'm missing something very basic here OR there is some change on iOS that I'm not aware.
好吧,iPads 这样的行为已经有很长时间了。我的工作不是解释为什么你没有注意到。基本上你不应该在 viewDidLayoutSubviews
中做任何事情 time-consuming。
for now, my fix is to check if app is on background state and ignore viewDidLayoutView
这是完全合理的。我做同样的事情。例如(这是一个不同的方法,但它是相同的想法):
override func viewWillTransition(to size: CGSize, with tc: UIViewControllerTransitionCoordinator) {
if UIApplication.shared.applicationState == .background {
return
}
// ...
}
但是请注意,如果您正在进行手动布局并且在应用程序进入后台时不这样做,您的 App Switcher 快照可能看起来不对。此外,您没有使用自动布局这一事实是一个危险信号。你可能应该使用它。
这一切都是从很多关于collectionView单元格宽度的警告开始的, 每次我按下主页按钮时都会写入控制台。
我认为这是与单元格大小有关的问题并尝试修复它。 只有在一些测试之后,我才注意到 viewDidLayoutView 被错误地调用 view.bounds,这使得 collectionView 单元格比集合视图更大(宽度)。
目前,我的解决方法是检查应用程序是否处于后台状态并忽略 viewDidLayoutView。
- 为什么它只发生在 iPad 而不是 iPhone ?
- 很奇怪,我现在才看到这种情况。这是 iOS 中的新内容 ?
- 处理这个问题的正确方法是什么?我不使用自动布局
- 它的调用边界错误,我不想计算所有单元格框架只是为了让用户 return 到相同的方向。
- 我觉得我在这里遗漏了一些非常基本的东西,或者 iOS 有一些我不知道的变化。
why it's happen only in iPad and not on iPhone ?
因为当您在 iPad 上单击“主页”并且应用程序进入后台时,运行时会拍摄两张快照,每个方向各一张,以在 App Switcher 界面中使用(并为当应用程序回到前面)。这意味着它必须旋转应用程序,这会触发布局,因此您的 viewDidLayoutSubviews
被调用。
it's whirred that only now I saw this happening. it's something new in iOS ? what is the right way to handle this ? I don't use auto-layout its calling with wrong bounds and I don't want to calculate all cells frames just for the user to return to the same orientation. I feed like I'm missing something very basic here OR there is some change on iOS that I'm not aware.
好吧,iPads 这样的行为已经有很长时间了。我的工作不是解释为什么你没有注意到。基本上你不应该在 viewDidLayoutSubviews
中做任何事情 time-consuming。
for now, my fix is to check if app is on background state and ignore viewDidLayoutView
这是完全合理的。我做同样的事情。例如(这是一个不同的方法,但它是相同的想法):
override func viewWillTransition(to size: CGSize, with tc: UIViewControllerTransitionCoordinator) {
if UIApplication.shared.applicationState == .background {
return
}
// ...
}
但是请注意,如果您正在进行手动布局并且在应用程序进入后台时不这样做,您的 App Switcher 快照可能看起来不对。此外,您没有使用自动布局这一事实是一个危险信号。你可能应该使用它。