我想创建一个自定义的窗口工具栏,但是不使用实际的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
的 addTitlebarAccessoryViewController:
方法。采用这种方法仍然存在一个问题,即 layoutAttribute
的可能值为:
NSLayoutAttributeBottom
将视图添加到窗口标题栏底部,同时保留视图的高度。NSLayoutAttributeRight
将视图添加到窗口标题栏右侧,将视图修剪为标题栏的高度。
NSLayoutAttributeBottom
对我来说不合适,因为我需要将东西放在窗口标题栏顶部(请参见上面的截图)并居中交通灯。
NSLayoutAttributeRight
恰好是我所需的,但我找不到一种方法来增加标题栏的高度,使视图被裁剪为标题栏高度,这对我没有用。(注意:使用纹理窗口并更改内容边框无效,因为它不会更改实际标题栏高度)
有什么推荐的方法吗?如果可以拥有大于默认标题栏的视图,则我更愿意使用官方API并使用AccessoryViewController方法。