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

时间:2016-08-16 23:31:22

标签: macos cocoa nswindow

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

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

我还没有找到一个模式。

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

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

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

1 个答案:

答案 0 :(得分:9)

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

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

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

Meta:documentation for wantsLayer谈论了许多与窗口形状或剪裁无关的复杂事物,它甚至不是NSWindow的财产,而NSWindow有一些声称是关于窗口四舍五入的旗帜但不再工作的旗帜,所以我不确定任何人应该发现这个,除非花了两天的时间进行反复试验。我希望这个答案有助于其他人!