如何改变NSWindow标题栏的高度?

Flo*_*ked 9 macos cocoa nswindow

我想改变NSWindow标题栏的高度.

这里有些例子: 替代文字

和…

替代文字

我可以使用NSToolbar,但问题是我无法将视图放置得非常高(例如:我不能将segmentedControl放在比图片更高的位置,因为还有标题栏) 替代文字

如果我删除标题栏,我无法放置NSToolbar,窗口不可移动.

你有什么想法吗?

Arv*_*vin 23

这比人们想象的要容易得多.我也开始寻求为我的应用做类似的事情.

真正的App Store应用程序: 这是App Store应用程序......

我的App Store应用程序外观相似: 我的App Store看起来很像......

没有对INAppStoreWindow的不尊重,它是一个非常好的实现和坚实.我从中看到的唯一的缺点是,有很多绘图代码以及Apple可以随时调整的TitleBar颜色的硬编码设置.

所以这就是我做的方式:

A)创建一个标题窗口,其中包含标题栏,关闭,最小化,阴影,调整大小,全屏 - 主窗口全部设置.注意:您不需要纹理窗口也不需要设置标题

B)接下来添加具有以下设置的标准工具栏:

  • 仅限图标
  • 发射时可见 - ON
  • 可定制 - 关闭
  • 分隔符 - 开启
  • 大小 - 常规

删除所有工具栏项目,并按以下顺序添加这些项目

NSSegmentControl(51 x 24) - | 灵活的空间| - NSSearchField(150 x 25)

C)在您的内容视图工具栏正下方添加一个常规大小的NSButton集,如下所示:

  • 有边界 - 关闭
  • 透明 - 关闭
  • 标题 -
  • 图片 -
  • 位置 - 按钮下方的文字
  • 字体 - 系统小11

好的,到目前为止很容易,对吧?!

在您的Window Controller或app delegate ....设置IBOutlet到您的NSButton(s)

注意:请记住在界面构建器中连接IBOutlet

好吧,不要害怕我们现在必须编写一小段代码:

在awakeFromNib或windowDidLoad ....

  1. 获取内容视图的超级视图(又名NSThemeView)
  2. 从superView中删除您的按钮
  3. 设置按钮的框架
  4. 将按钮添加回主题视图

所以代码看起来与此类似:

NSView *themeView = [self.contentView superview];
NSUInteger adj = 6;

[self.btnFeatured removeFromSuperview];
self.btnFeatured.frame = NSMakeRect( self.btnFeatured.frame.origin.x,
                              self.window.frame.size.height - self.btnFeatured.frame.size.height - adj,
                              self.btnFeatured.frame.size.width, self.btnFeatured.frame.size.height);
[themeView addSubview:self.btnFeatured];
Run Code Online (Sandbox Code Playgroud)

而已!您可以使用插座启用/禁用按钮,选择时设置遮罩图像,启用/禁用工具栏甚至隐藏所有内容并添加窗口标题.如果Apple改变他们的标准Window Titlebars,所有这一切都不用担心.

PS在这个帖子中没有使用任何私人框架!


dam*_*amo 5

INAppStoreWindow是NSWindow的子类,它告诉您如何更改标题栏的高度。

https://github.com/indragiek/INAppStoreWindow

http://iloveco.de/adding-a-titlebar-accessory-view-to-a-window/
此示例告诉您如何在标题栏中添加按钮。