Apple Watch:如何只滚动 table 内容,而不是整个手表用户界面?

Apple watch: How to scroll only table contents, and not the whole watch user interface?

为了学习手表编程,我设置了一个小的测试应用程序,它只包含一个图像和一个 table:

该应用程序由 iOS 和手表模拟器执行。图片和 table 内容已由应用程序正确设置。

当 table 太长无法完全显示在手表屏幕上时,我预计点击 table 会允许它滚动 table 内容。 然而,完整的观看内容是滚动的,包括图像(请注意绿色圆盘已经滚动到一半看不见了):

我需要做什么才能使图像固定在屏幕上,同时允许 table 内容垂直滚动?

虽然私有 API 支持您想要执行的操作,但该功能在 watchOS 2 或 watchOS 3 中并未公开提供给我们。

我们仅限于整个界面滚动(当其内容大于屏幕尺寸时),或者整个界面根本不滚动(当其内容适合屏幕尺寸时)。

您可能想要提交功能请求,要求静态组、粘性 table 行 header 或滚动区域。

什么接近...

The new WKCrownSequencer and WKCrownDelegate 可以让您与场景或特定界面交互 object,但无法代表整个滚动界面控制器覆盖系统的手势识别和滚动支持。

我不认为有一种优雅的方式来实现你现在想要的东西,它会完美地工作。

如果您决心破解或重新考虑这个...

如果您不想等待 Apple 最终为您提供适当的支持,这里有一些选项可能会帮助您从不同的方向解决这个问题。

  • 尝试用选择器替换 table。选择器会让您在较小的屏幕上滚动浏览不同的项目,但它显然看起来不像 table

  • 将您的 table 限制在不超过屏幕大小的固定行数。您可以在皇冠滚动时更新行内容 ,但这将是一种分页效果而不是滚动效果

  • 下拉到 Core Graphics 以绘制位置 activity 指示器,或 table 文本以创建屏幕的一部分(不)滚动的错觉.

  • 更改table行的背景颜色,让背景颜色作为位置activity指示器。

在 watchOS 3 中,只需通过以下方式将任何对象设置为委托:

let crownSequencer = WKExtension.shared().rootInterfaceController!.crownSequencer
crownSequencer.delegate = self
crownSequencer.focus()

然后通过执行读回值:

func crownDidRotate(_ crownSequencer: WKCrownSequencer?, rotationalDelta: Double)