滚动视图如何在macOS上工作

如果您曾经开发过iOS应用程序,那么我猜您已经构建了一次或两次表视图或集合视图。 您可能还熟悉两个UI元素都具有的继承。 它们都继承自UIScrollView以获得滚动行为。 您可能已经猜到了,macOS并非如此。 要为用户增加滚动体验,您将必须实现NSScrollView 。 这不是一项艰巨的任务,但要使其顺畅运行,您必须了解NSScrollView的核心概念,或者更确切地说,是如何将iOS思维方式转换到macOS域。

如果您排除滚动视图本身,则NSScrollView由两部分组成: NSClipView和文档视图。 文档视图是您需要提供的唯一东西才能使它起作用。
由于苹果在提供所有活动部件如何组合方面做得非常出色,因此我不会赘述。 对于我们的示例,文档视图将是一个简单的NSView ,但它可能是表视图或集合视图。

https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/NSScrollViewGuide/Articles/Basics.html

对于这些示例,我决定通过使它们易于在操场上使用来提高其档次,只需将代码复制到操场上即可,您应该可以随意修改代码。

我们要做的第一件事是设置要用作滚动视图的文档视图的自定义视图。 我们给它一个比滚动视图更突出的高度,以使其滚动。 文档视图的大小用作滚动视图的内容大小。 因此,如果要水平滚动,则文档视图应比滚动视图宽。

为了给游乐场提供一个很好的例子,我们在自定义视图中添加了渐变,以使滚动更加明显。

因为我们希望滚动视图的初始位置位于顶部,所以我们需要将此信息提供给内容视图,即滚动视图的剪辑视图。 或者,我们也可以在文档视图本身上调用相同的方法,但是我倾向于总是在内容视图上调用它,因为它是非可选的,而文档视图则不是。

将内容偏移设置为子视图框架的整个高度似乎很奇怪。 有关框架如何在macOS中工作的更多信息,您可以阅读我以前的文章之一。 在那篇文章中,我们介绍了一个翻转视图坐标系的小技巧,让我们在此处应用相同的技巧,以了解如何更改实现以使以iOS为中心的框架查看方式更有意义。

现在,我们创建NSView的子 ,并将属性isFlipped设置为返回true 。 现在我们可以简单地将内容偏移量设置为从零开始,这很容易推断。

就是这样,在操场上射击并旋转一下,最简单的实验方法就是亲眼看看。 有关NSScrollView必须提供的所有内容的更深入的信息,建议您查阅Apple的文档。