一个NSWindow到底是什么时候圆角?

J. *_*coe 5 macos cocoa nswindow

(我发现了几个类似的问题,但没有完全相同.有些问题比有问题的操作系统要老.有些人做了疯狂的事情,比如完全自定义的窗口.我找不到有关如何使普通窗口正常工作的说明.)

从OS X Lion开始,标准窗口有圆角.不幸的是,我无法在我的应用程序中复制它.当NSView被推到NSWindow的角落时,有时它会被限制在圆形NSWindow上,有时它会逃脱并形成一个方角.

我还没能弄清楚一个模式.

  • 即使是"绘制背景"的NSView也有时会强迫方角,所以不是这样.
  • 我的自定义NSViews制作方角(我负责检查我在NSWindow中的位置,如果我靠近边缘那么剪裁到它?),但是一些标准的Cocoa控件也是这样做的.

例如,创建一个新的Cocoa项目,在主NSWindow中放置(滚动)NSTableView或NSTextView,并添加布局约束,使其跟随窗口的边缘.底角是方形的!相比之下,Finder有一个(看起来像)NSTableView,就在窗户的底角,它是圆形的.

如何制作一个普通的NSWindow,底部有适当的圆角?

J. *_*coe 9

要设置的标志,以便让NSWindow将其内容剪辑到其实际的窗口边界(为什么这不是默认值?)是NSView的wantsLayer.

  • 在代码中:contentView!.wantsLayer = true,当窗口加载时.

  • 或者在IB中:选择窗口的根视图,然后在"视图效果检查器"中,选中"核心动画层"中的旁边的框(即使您没有使用核心动画).

Meta:关于许多复杂事物的谈论文档,wantsLayer这些事情似乎与窗口形状或剪裁无关,它甚至不是NSWindow的属性,而NSWindow有一些声称是关于窗口角落的标志但是哪个不再工作,所以我不确定任何人应该发现这个,除非花费2天时间进行反复试验.我希望这个答案有助于其他人!