0

这一切都是从很多关于collectionView单元格宽度的警告开始的,每次我按下主页按钮时都会写入控制台。

我认为这是细胞大小的问题,并试图修复它。只有经过一些测试,我才注意到 viewDidLayoutView 被错误的 view.bounds 调用,这使得 collectionView 单元格比集合视图更大(宽度)。

目前,我的解决方法是检查应用程序是否处于后台状态并忽略 viewDidLayoutView。

  1. 为什么它只发生在 iPad 而不是 iPhone 上?
  2. 只是现在我才看到这种情况发生。这是iOS中的新东西吗?
  3. 处理这个问题的正确方法是什么?我不使用自动布局
  4. 它的调用边界错误,我不想计算所有单元格帧只是为了让用户返回相同的方向。
  5. 我觉得我在这里遗漏了一些非常基本的东西,或者 iOS 上有一些我不知道的变化。
4

1 回答 1

5

为什么它只发生在 iPad 而不是 iPhone 上?

因为当您在 iPad 上单击 Home 并且应用程序进入后台时,运行时会拍摄两个快照,每个方向一个,以在 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 快照可能看起来有问题。此外,您没有使用自动布局这一事实是一个危险信号。您可能应该使用它。

于 2019-07-09T17:34:25.110 回答