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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容