我想创建一个自定义窗口工具栏,但不使用实际的 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 方法。