28

我想创建一个自定义窗口工具栏,但不使用实际的 NSToolbar (因为它在某些情况下不能满足我的需要,而且我不能按照我想要的方式设置它),因此我需要添加一个子视图到窗口标题栏。它应该如下所示:自定义工具栏截图

一种可能的方法是:

[[[_window contentView] superview] addSubview:_titlebarView];

但这有一个问题,它会在 Yosemite ( NSWindow warning: adding an unknown subview: <NSView: 0x608000122b20>) 上引起警告,所以这似乎不是正确的方法。

目前我正在将工具栏视图添加到标题栏视图:

[[[_window standardWindowButton:NSWindowCloseButton]
    superview] addSubview:_titlebarView];

但这也感觉不对。

由于我的应用程序仅针对 OS X 10.10 (Yosemite),因此我可以使用仅限 Yosemite 的 API,因此我查看NSTitlebarAccessoryViewController并成功地对其进行了子类化,并通过NSWindow'saddTitlebarAccessoryViewController:方法使用它。使用这种方法仍然存在一个问题,可能的值为layoutAttribute

  • NSLayoutAttributeBottom
    将视图添加到窗口标题栏的底部,同时保留视图的高度。
  • NSLayoutAttributeRight
    将视图添加到窗口标题栏的右侧,将视图剪辑到标题栏的高度。

不适合我,因为我需要将NSLayoutAttributeBottom东西放在窗口标题栏的顶部(见上面的截图)并将红绿灯居中。 NSLayoutAttributeRight这正是我所需要的,但我找不到增加标题栏高度的方法,所以视图被剪裁到标题栏高度,这对我来说毫无用处。(注意:使用带纹理的窗口并更改内容边框不起作用,因为它不会更改实际的标题栏高度)

推荐的方法是什么?如果有可能拥有比默认标题栏更大的视图,我更愿意使用官方 API 并使用 AccessoryViewController 方法。

4

4 回答 4

6

它只是一个 NSToolBar。在 Yosemite 的时候window.title.titleVisibility = .Hidden,NSToolBar 会变成标题栏

于 2015-01-27T08:23:39.563 回答
4

WAYAppStoreWindow可能会完成您正在寻找的内容。它是明确构建的,以避免优胜美地中的子视图警告,指定自定义窗口标题栏高度并将子视图添加到标题栏。

于 2015-01-06T15:30:12.503 回答
1

谢谢@ePirat

将子视图添加到它们的 titlebarView,与做的相同

[[[_window standardWindowButton:NSWindowCloseButton] superview] addSubview:_customTitlebarView];
于 2015-06-05T16:01:29.103 回答
0

将您的窗口分配给本端视图。然后添加带有框架的子视图,稍后提供所需的功能

于 2015-04-03T12:34:32.077 回答