如何修复 Apple Watch 页面控制器中缺少的界面控制器?

Posted

技术标签:

【中文标题】如何修复 Apple Watch 页面控制器中缺少的界面控制器?【英文标题】:How to fix missing interface controller inside Page Controller in Apple Watch? 【发布时间】:2019-10-28 17:43:28 【问题描述】:

我发现了什么?

尝试在根页面控制器内的界面控制器之间水平滚动。

    一段时间后(30-1 分钟)随机。

    您会发现其中一个接口控制器丢失了。

    显示空白视图,UI 完全消失。 (没有界面的黑色视图)。

    尝试在XCode中打开视图调试器,你会发现页面视图控制器层次结构中缺少视图的界面窗口。

重现

创建一个新的应用程序。

创建一个新的 Watch 应用程序

向故事板添加了 2 个额外的界面控制器

为两者添加标识符

在初始接口控制器调用内部

WKInterfaceController.reloadRootPageControllers(withNames: ["View1","View2"], contexts: ["View1","View2"], orientation: .horizontal, pageIndex: 1)

在 Watch OS 6 Series 3(模拟器或 A 设备)上运行应用程序 尝试随机滚动

我希望页面控制器能够保持界面控制器应有的状态,并且在用户滚动时不应显示空白黑屏。

【问题讨论】:

恐怕没有解决方案,但我在最近对我的 Watch 应用程序的更改中也看到了这一点。仅在我添加了第三个视图控制器并切换到 SwiftUI 之后发生 - 不知道它们是否相关 不科学地自从昨天升级到 WatchOS 6.1 后我就没见过它,所以希望修复???? 感谢您的评论,我确实确认它与 WatchOS 5 完美配合 问题显然是 WatchOS 6 中的一个错误。现在正在更新 WatchOS 6.1。 我更新到 WatchOS 6.1 并解决了这个问题,还注意到同样的问题可以很容易地在苹果自己的文档示例中重现。 我仍然在使用 watchOS 6.1 时体验到这一点 【参考方案1】:

我遇到了同样的问题,这是由于调用 crownSequencer.focus() 而没有相应的 crownSequencer.resignFocus() 调用。在我的情况下,我在didAppear() 中调用focus(),一旦我向willDisappear() 添加了resignFocus() 调用,问题就消失了。

这里有类似的问题: Black screen page on apple watch apps with more that one page

【讨论】:

以上是关于如何修复 Apple Watch 页面控制器中缺少的界面控制器?的主要内容,如果未能解决你的问题,请参考以下文章

Assets.xcassets 中缺少 Apple Watch AppIcon for Long-Look 通知

如何使用/获取 Apple Watch 全屏模式

关闭辅助视图控制器后,如何继续从 Apple Watch 接收消息/数据

如何覆盖 Apple Watch 后退按钮以弹出到根控制器

为 SwiftUI Apple Watch App 实现基于页面的导航

如何获取 Apple Watch 唯一 ID 或 UDID?