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

时间:2011-01-09 12:56:44

标签: cocoa macos nswindow

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

以下是一些例子: alt text

和...

alt text

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

如果删除标题栏,我无法放置NSToolbar,窗口也不能移动。

你有什么想法吗?

4 个答案:

答案 0 :(得分:23)

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

Real App Store应用: Here is the App Store app...

我的App Store应用程序外观相似: My App Store look-alike...

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

所以我就是这样做的:

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

B)接下来添加一个带有这些设置的标准工具栏:

  • 仅限图标
  • 在启动时可见 - 开启
  • 可自定义 - 关闭
  • 分隔符 - 开启
  • 尺寸 - 常规

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

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

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

  • 有边框 - 关闭
  • 透明 - 关闭
  • 标题 -
  • 图片 -
  • 位置 - 按钮下方的文字
  • 字体 - System Small 11

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

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

注意:请记住在界面构建器

中连接IBOutlet

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

在awakeFromNib或windowDidLoad ....

  1. 获取内容视图的超级视图(又名NSThemeView)
  2. 从superView中删除按钮
  3. 设置按钮的框架
  4. 将按钮添加回主题视图
  5. 所以代码看起来与此类似:

    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];
    

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

    P.S。在这个帖子中没有使用任何私人框架!

答案 1 :(得分:4)

您必须继承NSWindow并执行自定义窗口框架绘制。它不仅仅是一个标题栏。这是关于整个窗口框架(所以你可以,如果你愿意,你可以在底部放置关闭/最小化/缩放按钮)。

好的首发是"Cocoa with love" website

答案 2 :(得分:4)

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

https://github.com/indragiek/INAppStoreWindow

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

答案 3 :(得分:2)

有一些基于INAppStoreWindow的新解决方案,没有警告和日志消息,对于想要更改NStitlebar高度的人,更改交通信号灯的位置,在NStitlebar上添加项目(例如NS按钮)并更改其位置,请在下面查看。

WAYWindow: https://github.com/weAreYeah/WAYWindow

NStitlebar_with_item: https://github.com/ZHANGneuro/NStitlebar_with_item