首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向NSWindow标题栏添加子视图

问向NSWindow标题栏添加子视图
EN

Stack Overflow用户
提问于 2014-12-27 01:18:52
回答 4查看 6.1K关注 0票数 28

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

​

一种可行的办法是:

代码语言:javascript
复制
[[[_window contentView] superview] addSubview:_titlebarView];

但这有一个问题,那就是它会对约塞米蒂(NSWindow warning: adding an unknown subview: <NSView: 0x608000122b20>)造成警告,所以这似乎不是正确的方法。

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

代码语言:javascript
复制
[[[_window standardWindowButton:NSWindowCloseButton]
    superview] addSubview:_titlebarView];

但这感觉也不对。

由于我的应用程序只针对OSX10.10(约塞米蒂),所以我可以使用仅使用约塞米蒂的API,所以我查看了NSTitlebarAccessoryViewController,并成功地将其子类化并使用了NSWindow的addTitlebarAccessoryViewController:方法。使用这种方法还存在一个问题,layoutAttribute的可能值是:

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

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

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

EN

回答 4

Stack Overflow用户

发布于 2015-01-27 08:23:39

它只是一个NSToolBar。在约塞米蒂,当window.title.titleVisibility = .Hidden,NSToolBar将成为标题栏

票数 6
EN

Stack Overflow用户

发布于 2015-01-06 15:30:12

WAYAppStoreWindow可能会完成你想要的东西。它的构建显式地避免了Yosemite中的子视图警告,指定了一个自定义窗口标题栏高度,并向标题栏添加了子视图。

票数 4
EN

Stack Overflow用户

发布于 2015-06-05 16:01:29

谢谢@ePirat

将子视图添加到其titlebarView中,将与执行以下操作相同

代码语言:javascript
复制
[[[_window standardWindowButton:NSWindowCloseButton] superview] addSubview:_customTitlebarView];
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27663575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档