在 NSScrollView 上剪切圆角

fir*_*der 5 cocoa appkit osx-lion

我有一个简单的自定义无边框 NSWindow 子类,它具有圆角矩形形状。

在这个窗口的内容视图中,我添加了一个 NSScrollView。

如何让 NSScrollView 将其文档视图剪辑到 NSWindow 的圆角矩形形状?

我已经尝试子类化 NSScrollView,覆盖 drawRect: 并在调用 super 之前添加一个剪切路径。我还尝试使用相同的技术对文档视图和剪辑视图进行子类化,但我无法将其剪辑。

顺便说一句,这是在具有弹性滚动行为的 Lion 上。

Dal*_*zio 4

经过一番摆弄,我发现NSScrollView只需给它一个背衬层并设置该层的角半径,就可以使其具有圆角,前提是您也对其内部执行相同的操作NSClipViewNSScrollView两者都是必需的,现在这是有意义的,因为剪辑视图实际上为的文档视图提供了可视窗口。

NSScrollView * scrollView = ...;

// Give the NSScrollView a backing layer and set it's corner radius.
[scrollView setWantsLayer:YES];
[scrollView.layer setCornerRadius:10.0f];

// Give the NSScrollView's internal clip view a backing layer and set it's corner radius.
[scrollView.contentView setWantsLayer:YES];
[scrollView.contentView.layer setCornerRadius:10.0f];
Run Code Online (Sandbox Code Playgroud)

  • 但请注意,这似乎不适用于包含 NSTextView 的 NSScrollView。在这种情况下,我们需要恢复到掩模层方法。 (2认同)