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

一种可行的办法是:
[[[_window contentView] superview] addSubview:_titlebarView];但这有一个问题,那就是它会对约塞米蒂(NSWindow warning: adding an unknown subview: <NSView: 0x608000122b20>)造成警告,所以这似乎不是正确的方法。
目前,我正在将工具栏视图添加到标题栏视图中:
[[[_window standardWindowButton:NSWindowCloseButton]
superview] addSubview:_titlebarView];但这感觉也不对。
由于我的应用程序只针对OSX10.10(约塞米蒂),所以我可以使用仅使用约塞米蒂的API,所以我查看了NSTitlebarAccessoryViewController,并成功地将其子类化并使用了NSWindow的addTitlebarAccessoryViewController:方法。使用这种方法还存在一个问题,layoutAttribute的可能值是:
NSLayoutAttributeBottom
将视图添加到窗口标题栏的底部,同时保留视图的高度。NSLayoutAttributeRight
将视图添加到窗口标题栏的右侧,将视图裁剪到标题栏的高度。NSLayoutAttributeBottom不适合我,因为我需要把东西放在窗口标题栏的顶部(见上面的截图),并把交通灯放在中心。NSLayoutAttributeRight正是我所需要的,但是我找不到增加标题栏高度的方法,所以视图被剪裁到标题栏的高度,使它对我来说毫无用处。(注意:使用纹理窗口和更改内容边框无效,因为它不会更改实际标题栏的高度)
建议的方法是什么?如果有可能出现比默认标题栏更大的视图,我更愿意使用官方API并使用AccessoryViewController方法。
发布于 2015-01-27 08:23:39
它只是一个NSToolBar。在约塞米蒂,当window.title.titleVisibility = .Hidden,NSToolBar将成为标题栏
发布于 2015-01-06 15:30:12
WAYAppStoreWindow可能会完成你想要的东西。它的构建显式地避免了Yosemite中的子视图警告,指定了一个自定义窗口标题栏高度,并向标题栏添加了子视图。
发布于 2015-06-05 16:01:29
谢谢@ePirat
将子视图添加到其titlebarView中,将与执行以下操作相同
[[[_window standardWindowButton:NSWindowCloseButton] superview] addSubview:_customTitlebarView];https://stackoverflow.com/questions/27663575
复制相似问题