TVOS 需要按下 2 次菜单按钮才能从根控制器退出到仪表板

TVOS requires 2 Menu Button Presses to exit to Dashboard from Root Controller

我负责更新现有的 TVOS 项目。我 运行 遇到了一些麻烦。

如果我在根控制器上(即:在应用程序启动时显示的控制器。)

按“菜单”按钮会将我转到空白 gray/white 屏幕。第二次按菜单 returns 我进入仪表板。

我曾尝试使用层次结构查看器来查看 gray/white 屏幕到底是什么,但没有帮助。 gray/white 屏幕由一个带有 UILayoutContainerView 的 UIWindow 组成,其中包含一个 UINavigationTransitionView。我找不到关于它的其他可识别特征来帮助我确定到底发生了什么。

应用程序启动时会加载一个 UINavigationController,它会呈现一个 UIViewController。 Nav 控制器和呈现的 ViewController 都不会覆盖 pressesBegin、pressesEnd 或分配任何 gestureRecongnizers 以拦截或以其他方式覆盖菜单按钮功能。

据我所知,该应用程序应该表现出默认的菜单按钮按下行为,即导航回根目录,然后在根目录退出一次仪表板。也就是说,菜单按钮确实会按原样向后导航。它只是不会在根目录下终止一次应用程序。当它进入 gray/white 屏幕时 none 的功能:applicationWill... 将执行,直到第二次按下遥控器上的菜单按钮。该应用程序也将恢复到此 gray/white 屏幕。

My question is thus, what is going on here. Baring that how can I debug this behavior more effectively.

我已尝试对这个解释进行透彻。我认识到没有代码事情会变得很困难。事情是,我不知道什么代码是相关的,所以将发布任何可能有用的特定代码的指导或请求。

谢谢。

让我们调用您的导航控制器 A 和呈现的视图控制器 B

听起来好像 A 实际上没有任何 children,或者它有一个空白的视图控制器,因为它只有 child。我假设您从不在 A 上调用 pushViewController(_, animated:)?当您使用 init(rootViewController:) 创建它时,您传递给 A 的是什么?

当您第一次按下菜单按钮时,UIKit 会自动关闭显示的视图控制器 B,并显示空的导航控制器 A。您看到的灰色屏幕实际上是 tvOS 壁纸,它在应用程序的视图层次结构之外呈现。

然后第二次按下菜单按钮实际上会导致应用退出,因为导航控制器 A 没有更多 children 可以弹出。

所以听起来你应该:

  • 添加视图控制器 B 作为 A 的 child,而不是显示它。

  • 或者,将 B 设置为根视图控制器并忘记 A