Macos 带圆角的NSTableView

Macos 带圆角的NSTableView,macos,cocoa,nstableview,rounded-corners,Macos,Cocoa,Nstableview,Rounded Corners,我正在尝试自定义应用程序的UI,我希望我的NSTableView具有圆角。因此,我将NSTableView子类化,得到以下结果: 但是,当我填充表格并选择一行时,选择将绘制在边框上,如下所示: 我曾尝试在表视图绘图代码中添加剪辑,但它不起作用。关于如何解决这个问题,有什么建议吗 编辑: NSTableView中的图形代码如下所示: - (void)drawRect:(NSRect)dirtyRect { [NSGraphicsContext saveGraphicsState];

我正在尝试自定义应用程序的UI,我希望我的NSTableView具有圆角。因此,我将NSTableView子类化,得到以下结果:

但是,当我填充表格并选择一行时,选择将绘制在边框上,如下所示:

我曾尝试在表视图绘图代码中添加剪辑,但它不起作用。关于如何解决这个问题,有什么建议吗

编辑:

NSTableView中的图形代码如下所示:

- (void)drawRect:(NSRect)dirtyRect {
    [NSGraphicsContext saveGraphicsState];
    NSRect frame = NSMakeRect(0.0, 0.0, [self bounds].size.width, [self bounds].size.height-1.0);
    [[NSBezierPath bezierPathWithRoundedRect:frame xRadius:3.6 yRadius:3.6] addClip];
    [super drawRect:dirtyRect];
    [NSGraphicsContext restoreGraphicsState];
}
实际的圆形框架是在NSScrollView drawRect方法中绘制的。有趣的是,这确实剪辑了第一行和最后一行的选择:

但不是在表格滚动时:


所以问题仍然存在:如何在NSScrollView的圆形框架内剪裁所有图形?

我使用CALayer很好地解决了这个问题。在尝试将从NSScrollView到NSTableView再到NSClipView的所有内容子类化之后,仍然存在上面所示的呈现问题,我最终只是将以下代码添加到NSScrollView子类的drawRect中:

if (!self.contentView.wantsLayer) {
    [self.contentView setWantsLayer:YES];
    [self.contentView.layer setCornerRadius:4.0f];
}

然后我用NSScrollView中相同的drawRect方法绘制框架。它解决了上述所有问题。

我发现您可以在表视图的容器滚动视图中调用它

self.scrollView.wantsLayer = TRUE;
self.scrollView.layer.cornerRadius = 6;

这就是我所需要的一切,而且很有效。无需子类化。

您是否会发布执行剪切的代码?您是否覆盖了
drawRect
initWithRect
?@FireLizzard在initWithRect方法中放置了什么?我在上面的NSTableView中发布了我的drawRect方法。框架的实际绘制是在NSScrollView的drawRect方法中进行的。我对NSView的子类化不太了解。您可能不必重写
initWithRect
,我只是把它作为一种可能。我想知道你的问题是否与剪辑后调用
[super-drawRect:
有关。只是想法。