默认的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