NSWindow 究竟何时会出现圆角?

When exactly does an NSWindow get rounded corners?

(我发现了几个类似的问题,但没有什么完全相同的。有些比问题中的 OS 更老。有些在做疯狂的事情,比如完全自定义 windows。我发现没有人有有关如何使完全普通的 window 正常工作的说明。)

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

我还没想出规律。

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

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

为了使 NSWindow 将其内容剪辑到其实际 window 边框(为什么这不是默认设置?),要设置的标志是 NSView 的 wantsLayer.

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

  • 或在 IB 中:select 您的 Window 的根视图,然后在 "View Effects inspector" 中,在 [=29= 中选中它旁边的框](即使你没有使用 Core Animation)。

Meta:documentation for wantsLayer 讨论了很多看起来与 window 形状或裁剪完全无关的复杂事物,它甚至不是 NS 的 属性 Window,虽然 NSWindow 有一些标志声称是关于 window 圆角但不再起作用,所以我不确定任何人应该如何发现这个,除非花 2 天时间进行反复试验。我希望这个答案对其他人有帮助!