Apple Watch:从基于页面的导航显示模式屏幕后,状态栏不可见

Posted

技术标签:

【中文标题】Apple Watch:从基于页面的导航显示模式屏幕后,状态栏不可见【英文标题】:Apple Watch: Status bar not visible after presenting a modal screen from page based navigation 【发布时间】:2015-03-27 22:11:52 【问题描述】:

当我在基于页面的导航中从页面呈现模式屏幕时,整个屏幕向上移动并且状态栏不再可见。 这是问题的 GIF:

我使用的是 xCode 6.2 版本。 这在 xCode 6.2 Beta 4 中没有发生.. 我不确定这是模拟器问题还是真的会在真实设备上发生。 有没有人有同样的问题?有解决办法吗?

我向苹果 (20109240) 报告了一个错误,它被标记为 (19862945) 的副本,并且该错误仍然处于打开状态。 提前致谢

【问题讨论】:

请注意,这已在 Watch OS 1.0.1 中修复。 【参考方案1】:

这是最终版本中的一个已知问题,它在两种情况下表现出来:

    在现有分页模式控制器上显示第二个模式控制器(分页或单个)时 在分页模式控制器上使用 Force Touch 呈现菜单时

这已在 Apple 开发者论坛中讨论过,我听说的唯一解决方法是我在我的应用程序中使用的解决方法。不幸的是,没有简单的代码可以解决这个问题,所以我将描述这种方法(我认为它很混乱,但可行)。

首先,您需要跟踪界面控制器的演示。我有一个框架,但你可能需要自己动手。当子界面控制器连续两次调用其 willActivate 时(换句话说,没有调用不同的子界面控制器),您可以假设在它之上呈现/关闭了一个模态。

然后,您的演示/父控制器可以通知所有子控制器模式菜单错误已发生,并且这些子控制器可以使用自己的取消/关闭按钮取消隐藏替换状态栏。通过一些工作,您可以重新创建具有相同行为的标准状态栏的像素完美版本。

最后一个转折点是检测您的 Watch 应用何时暂停,然后再恢复。在这种情况下, willActivate 也会被调用两次。如果您不处理这种情况,您最终将取消隐藏替换状态栏并同时在屏幕上显示两个。不是一个很好的场景。

做到这一点非常棘手,但它确实有效。我只是希望我有一个可以注入的简单代码示例。

更新:我将一些解决方法代码推送到了 GitHub: https://github.com/mikeswanson/JBInterfaceController

【讨论】:

非常感谢您的解决方案,在我的情况下应该更简单,因为我在应用程序中只有一个地方可以从页面推送模态屏幕。先生,您值得我赏金! 一个问题:当您取消隐藏菜单(状态栏),并且在页面之间滚动时,您有解决方案吗?我不希望菜单与页面一起滚动。 不幸的是,没有办法创建一个不会从一个页面滚动到另一个页面的区域。因此,每个页面都会有自己的替换状态栏。 我将一些解决方法代码推送到了 GitHub:github.com/mikeswanson/JBInterfaceController 这可能会有所帮助。 正如我上面提到的,这个错误已在 Watch OS 1.0.1 中得到修复。

以上是关于Apple Watch:从基于页面的导航显示模式屏幕后,状态栏不可见的主要内容,如果未能解决你的问题,请参考以下文章

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

Apple Watch Series 4 显示全屏错误

Apple Watch 应用中的黑屏输出

当 Apple Watch 处于后台状态或睡眠模式时,我们如何从 iphone 向 Apple Watch 发送消息?

从窗口组件反应导航全屏模式

在全屏模式演示样式中使用 segue 时如何仍然显示导航栏?