隐藏 window 标题与附件视图

Hidden window title with accessory view

我想要一个带有隐藏标题的 window,就像在 Safari 或 Xcode 中看到的那样,但使​​用标题栏附件视图而不是工具栏(我希望更好地控制排列和内容比工具栏提供的)。这可行吗?

我还不太能让它发挥作用。如果我将我的 window 的 titleVisibility 设置为 hidden,而我的辅助视图的 layoutAttributebottom,那么除了标准 close/minimize/zoom 按钮,我的附件视图出现在按钮下方。

如果我将 layoutAttribute 更改为 right,那么我的附件视图将出现在我想要的标准按钮的右侧,但底部被截断了,因为标题栏不是不够高,并且视图也不会随着 window.

水平调整大小

有没有办法让它工作?还是我必须使用工具栏?

更新: 我用Xcode的可视化调试器检查了Xcode自己的标题栏,发现它使用的是工具栏。调试器拒绝附加到 Safari,所以我想知道它是如何处理新选项卡按钮的。我想那个按钮是一个 right-pinned 附件视图,其余的是一个普通的工具栏。 Safari 的工具栏仍然是可定制的,所以这似乎很有可能。

我决定继续使用工具栏,它工作得很好。

  • 我把我的 NSTitleBarAccessoryController 子类继承自 NSViewController
  • 我为我的 window 创建了一个 non-customizable 工具栏,在允许和默认设置中都有一个 "Image Toolbar Item"。
  • 工具栏项的高度为 32,最大宽度为 10000,因此它可以拉伸以填充标题栏。
  • 在我的工具栏委托中,在 toolbarWillAddItem: 中,我从笔尖实例化视图控制器并将其视图放入项目中。
  • 实际上是新 window 标题的文本标签将其 value 绑定到 window 的 title
  • 为了匹配 Xcode 标题栏中的间距,使用 1 像素的左右边距(零将切断边缘)和 5 的上边距。
  • window.titleVisibility = .hidden 将工具栏移动到标题区域。