cocoa - cocoa 中的无边框窗口和阴影

标签 cocoa macos

我创建了一个无边框窗口,我想删除它的阴影。

这是我的初始化窗口代码:

- (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/

相关文章:

python - 如何使用python在Xcode中读取.dcm?

swift - MacOS 中的 WkWebView 在本地或远程内容上保持空白

xcode - 使用嵌入式框架项目构建项目时“找不到 MyHeader.h 文件”

javascript - XMLHttpRequest 无法加载 localhost 资源,安全检查是 Chrome

iphone - Singleton:在哪里创建实例?

objective-c - NSSplitView - setVertical :YES or setVertical:NO 后强制屏幕更新

macos - 适用于 OS X 桌面版的 GStreamer Flow

macos - 通过 MAC 命令行安装程序,将二进制文件放入我的 PATH 中

python - Docker flask 无法连接

c - Valgrind — 堆统计数据很奇怪 : memory leak?