我负责更新现有的 TVOS 项目。我遇到了一些障碍。
如果我在根 Controller 上(即:在应用程序启动时显示的 Controller 。)
按下“菜单”按钮会将我带到一个空白的灰色/白色屏幕。第二次按下菜单返回仪表板。
我曾尝试使用层次结构查看器来查看灰/白屏幕到底是什么,但没有帮助。灰色/白色屏幕由带有 UILayoutContainerView 的 UIWindow 组成,其中包含一个 UINavigationTransitionView。我找不到关于它的其他可识别特征来帮助我确定到底发生了什么。
当应用程序启动时加载一个 UINavigationController,它呈现一个 UIViewController。 Nav Controller 和呈现的 ViewController 都不会覆盖 pressesBegin、pressesEnd 或分配任何 gestureRecongnizers 来拦截或以其他方式覆盖菜单按钮功能。
据我所知,该应用程序应该表现出默认的菜单按钮按下行为,即导航回根目录,然后在根目录退出一次仪表板。也就是说,菜单按钮确实会按原样向后导航。它只是不会在根目录下终止一次应用程序。当它确实进入灰色/白色屏幕时,没有任何功能:applicationWill ... 直到第二次按下 Remote 上的菜单按钮后才会执行。该应用程序也将恢复到此灰色/白色屏幕。
My question is thus, what is going on here. Baring that how can I debug this behavior more effectively.
我已尝试对这个解释进行透彻。我认识到没有代码事情会变得很困难。事情是,我不知道什么代码是相关的,所以将发布任何可能有用的特定代码的指导或请求。
谢谢。
最佳答案
让我们调用您的导航 Controller A
和呈现的 View Controller B
。
这听起来像是 A
实际上没有任何 child ,或者它有一个空白的 View Controller ,因为它是唯一的 child 。我假设您从不在 A
上调用 pushViewController(_, animated:)
?当您使用 init(rootViewController:)
创建它时,您传递给 A
的是什么?
当您第一次按下菜单按钮时,UIKit 会自动关闭显示的 View Controller B
,并显示空的导航 Controller A
。您看到的灰色屏幕实际上是 tvOS 壁纸,它在应用的 View 层次结构之外呈现。
然后第二次按下菜单按钮实际上会导致应用程序退出,因为导航 Controller A
没有更多的 child 可以弹出。
所以听起来你应该:
将 View Controller
B
添加为A
的子级,而不是显示它。或者,将
B
设置为 Root View Controller 而忽略A
。
关于swift - TVOS 需要按下 2 次菜单按钮才能从根 Controller 退出到仪表板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47706122/