使用NSBorderlessWindowMask时视图周围的灰色边框

时间:2012-02-03 06:03:17

标签: objective-c cocoa nsview nswindow

我遇到与此问题完全相同的问题:

Gray border when using NSBorderlessWindowMask

然而,删除窗口阴影的接受答案(如评论中所示)似乎不起作用,至少在Lion上是这样。


我已经将NSWindow子类化了,并以这种方式创建了一个无边框窗口:

-(id)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)aStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)flag {

    self = [super initWithContentRect:contentRect 
                            styleMask:(NSBorderlessWindowMask | NSResizableWindowMask)
                              backing:bufferingType 
                                defer:flag];

    [self setMovableByWindowBackground:YES];
    [self setOpaque:NO];
    [self setBackgroundColor:[NSColor clearColor]];
    [self setHasShadow:YES];

    [self setLevel:NSMainMenuWindowLevel];
    return self;
}

请注意,此应用仅适用于Lion(因此NSResizableWindowMask不会更改外观)。我尝试禁用阴影,并为我的窗口切换多个设置,但我似乎无法删除此灰色边框:

enter image description here

我的代码中没有添加边框。我只是在窗口中的Interface Builder中添加了NSSplitView。在运行时,我将彩色视图作为子视图添加到拆分视图的左窗格中,完全填充左侧拆分视图的边界。

编辑:即使使用简单的NSView,也会发生这种情况,甚至不是拆分视图。


TL;DR:为什么我的NSView周围有灰色边框?

1 个答案:

答案 0 :(得分:2)

好吧,明白了。删除阴影只需将其添加到NSWindow子类:

- (BOOL)hasShadow {
    return NO;
}

要删除边框,您需要知道此边框来自视图 - 而不是窗口(就像您在编辑中所说的那样)。因此,您必须使用以下代码禁用视图的边框:

[myview setBorderType:NSNoBorder];