代码之家  ›  专栏  ›  技术社区  ›  user1105951

在iPad上按home键并使app go background trigger viewDidLayoutSubviews

  •  -1
  • user1105951  · 技术社区  · 5 年前

    这一切都是从很多关于collectionView单元格宽度的警告开始的, 每次我按“主页”按钮时都会写下这个命令。

    我以为是和细胞大小有关的东西,想把它修好。 只有在经过一些测试之后,我才注意到viewDidLayoutView是用错误的view.bounds调用的,这使得collectionView单元格比collection视图大(宽)。

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

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

    为什么只在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这一事实是一个危险信号。你应该用它。