gpt4 book ai didi

ios - 如果父项在 viewWillAppear 和 viewDidAppear 之间,则不会在包含的 VC 上调用 viewWillAppear

转载 作者:可可西里 更新时间:2023-10-31 23:44:27 29 4
gpt4 key购买 nike

我最近对 ​​iOS View Controller 包含感到头疼。

一切都按预期工作,除了一种特殊情况:

  • 如果父 View Controller 包含在父 View Controller 中,而父 View Controller 在其 viewWillAppear 和 viewDidAppear 调用之间,则 viewWillAppear 将永远不会发送到子 VC(子 VC 看到 viewDidLoad,然后看到 viewDidAppear)。

这种极端情况可能会出现,例如如果您创建并包含一个子 VC 作为异步网络调用的结果,它可能位于父级的 viewWillAppear 和 viewDidAppear 之间。

我在这里整理了一个演示:https://gist.github.com/cellularmitosis/8205610a80112eebd96c

要在本地重现此内容,请在 Xcode 中创建一个新的“Single View Application”iOS 项目,然后将 ViewController.swift 的内容替换为上述内容。

我是否遗漏了一些明显的东西,或者这是 Apple 的错误?

我猜这意味着我需要覆盖 shouldAutomaticallyForwardAppearanceMethods() 以返回 false,然后手动调用 beginAppearanceTransition 和 endAppearanceTransition?

最佳答案

跟进:这是我目前正在使用的解决方法:https://gist.github.com/cellularmitosis/56d734ab087a3f283455

我实现了一个 View Controller 转换状态跟踪器,如果父 VC 在 vi​​ewWillAppear 和 viewDidAppear 之间,那么我们对 shouldAutomaticallyForwardAppearanceMethods 回答 false。

containChildViewController 已更新以处理 shouldAutomaticallyForwardAppearanceMethods 的 true 和 false。

绝对是一个拼凑,但它似乎有效。

TODO:在 viewWillDisappear -> viewDidDisappear 转换期间可能存在类似错误。我没有检查过。

编辑:编辑变通要点以使用 beginAppearanceTransition/endAppearanceTransition 而不是直接调用 viewWillAppear/viewDidAppear

关于ios - 如果父项在 viewWillAppear 和 viewDidAppear 之间,则不会在包含的 VC 上调用 viewWillAppear,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33681308/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com