mac开发系列25:NSWindow去掉titlebar

默认的NSWindow是有titlebar的,如下safari窗口所示:



但很多时候,我们的个性化需求并不想要titlebar,如下弹出框所示:



去掉titlebar最直接的方法是配置NSWindow的xib文件,配置选项如下:

但这样会导致实现不了圆角和毛玻璃效果,如下所示:



然后尝试用NSView来实现,圆角可以用drawRect搞定(layer的cornerRadius属性会有问题),毛玻璃用NSVisualEffectView解决,另外毛玻璃的圆角则需要使用NSBezierPath(有个音译的名字“贝塞尔曲线”听起来很叼)来处理。但是NSView没法实现像NSWindow一样的阴影效果(NSShadow并不行)。
于是接着查看NSWindow中跟title有关的属性及其说明,并逐个尝试,如下:

self.window.titleVisibility = NSWindowTitleHidden; // 隐藏“Window”
self.window.titlebarAppearsTransparent = YES; // 标题栏透明,但还占着位置

上面两个属性类似于CSS中的visible:hidden(不同于display:none),titlebar只是看不见了,但是还占着位置,NSWindow=titlebar+contentView。没找到设置titlebar为none的方法,但是可以让contentView fullsize,如下所示:

self.window.styleMask |= NSFullSizeContentViewWindowMask; // contentView占满整个window

你可能感兴趣的:(mac开发系列25:NSWindow去掉titlebar)