【问题标题】:When exactly does an NSWindow get rounded corners?NSWindow 究竟什么时候会变成圆角?
【发布时间】:2016-08-16 23:31:22
【问题描述】:

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

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

我还没有弄清楚一个模式。

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

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

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

【问题讨论】:

  • 我的建议是显示您尝试过的代码,也许这样有人可以帮助您确定需要做的不同的事情。
  • 实际上没有代码。我在最后一段中描述了设置。新建 Cocoa 应用,添加 NSTableView 或 NSTextView 到窗口,运行。
  • 通常任何超出默认行为的东西都需要代码。
  • 是的,这就是我感到困惑的原因。 OS X 中的每个窗口都有圆角。在 Xcode 中做默认的事情给了我方角。为什么?说明这应该如何工作的文档在哪里?
  • 文档是 NSWindow 的文档,更具体地说是 NSTexturedBackgroundWindowMask...

标签: macos cocoa nswindow


【解决方案1】:

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

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

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

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

【讨论】:

  • 这解决了我多年的问题。现在我可以将NSTextView 放在NSWindow 的底部,而不必担心角落渲染...!
猜你喜欢
  • 1970-01-01
  • 2021-04-15
  • 2014-09-09
  • 2017-12-11
  • 2023-02-25
  • 2021-11-16
  • 2015-10-12
  • 2019-12-31
  • 2020-10-30
相关资源
最近更新 更多