我创建了一个无边框窗口,我想删除它的阴影。
这是我的初始化窗口代码:
- (id)initWithContentRect:(NSRect)contentRect
styleMask:(NSUInteger)windowStyle
backing:(NSBackingStoreType)bufferingType
defer:(BOOL)flag
{
if (![super initWithContentRect: contentRect
styleMask: NSBorderlessWindowMask
backing: NSBackingStoreBuffered
defer: NO]) return nil;
[self setHasShadow:NO];
[self setOpaque:NO];
[self setBackgroundColor:[NSColor clearColor]];
[self setAcceptsMouseMovedEvents:YES];
return self;
}
如您所见,我使用了 setHasShadow:NO
但没有任何反应,阴影仍然显示。
如何去除阴影?
最佳答案
嗯,一方面,您应该将对 super
的调用结果分配给 self
:
self = [super initWithContentRect: contentRect
styleMask: NSBorderlessWindowMask
backing: NSBackingStoreBuffered
defer: NO];
if(self)
{
//continue with initialisation
}
return self;
此外,如果窗口是从 Nib 加载的,则它可能具有在 Interface Builder 中指定的阴影。由于 nib 中的设置是在调用 init 方法后加载的,因此它们可能会覆盖 init 方法中的设置。
解决方案是确保窗口没有在 Interface Builder 中选中“阴影外观”复选框,或者在 -awakeFromNib
中调用 [self setHasShadow:NO]
> 而不是在初始化程序中。
-awakeFromNib
始终在加载 nib 文件并连接所有 socket 后调用。
关于cocoa - cocoa 中的无边框窗口和阴影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6625477/