【发布时间】:2011-06-06 01:39:24
【问题描述】:
我想改变一个 NSWindow 标题栏的高度。
这里有一些例子:
还有……
我可以使用 NSToolbar,但问题是我不能将视图放置得很高(例如:我不能将 segmentedControl 放置在高于图片中的位置,因为还有标题栏)
如果我删除标题栏,我将无法放置 NSToolbar 并且窗口不可移动。
你有什么想法吗?
【问题讨论】:
我想改变一个 NSWindow 标题栏的高度。
这里有一些例子:
还有……
我可以使用 NSToolbar,但问题是我不能将视图放置得很高(例如:我不能将 segmentedControl 放置在高于图片中的位置,因为还有标题栏)
如果我删除标题栏,我将无法放置 NSToolbar 并且窗口不可移动。
你有什么想法吗?
【问题讨论】:
这比人们想象的要容易得多。我也一直在寻求为我的应用做类似的事情。
真正的 App Store 应用程序:
我的 App Store 应用外观相似:
不尊重 INAppStoreWindow,它是一个非常好的实现和可靠的。不过,我从中看到的唯一缺点是有很多绘图代码以及 Apple 可以随时调整的 TitleBar 颜色的硬编码设置。
这就是我的做法:
A) 创建一个标准窗口,其中设置了标题栏、关闭、最小化、阴影、调整大小、全屏 - 主窗口。 注意:您不需要纹理窗口,也不应该设置标题
B) 接下来添加具有这些设置的标准工具栏:
删除所有工具栏项并按以下顺序仅添加这些项
NSSegmentControl (51 x 24) -- |灵活空间 | -- NSSearchField (150 x 25)
C) 在您的内容视图中,直接在工具栏下方添加一个常规大小的 NSButton 集,如下所示:
好的,到目前为止很容易,对吧?!
在您的窗口控制器或应用程序委托中...... 设置 IBOutlet(s) 到你的 NSButton(s)
注意:记得在界面生成器中连接你的 IBOutlet
好吧,别害怕,我们现在必须编写一点代码:
在 awakeFromNib 或 windowDidLoad....
所以代码看起来类似于:
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 更改其标准窗口标题栏,所有这一切都无需担心。
附:这篇文章中没有使用任何私有框架!
【讨论】:
INAppStoreWindow 是一个 NSWindow 子类,它告诉你如何改变标题栏的高度。
https://github.com/indragiek/INAppStoreWindow
http://iloveco.de/adding-a-titlebar-accessory-view-to-a-window/
这个例子告诉你如何在标题栏中添加按钮。
【讨论】:
您必须继承 NSWindow 并进行自定义窗口框架绘图。这不仅仅是关于标题栏。它是关于整个窗口框架(实际上,如果您愿意,您可以在底部放置关闭/最小化/缩放按钮)。
"Cocoa with love" website 是一个不错的起点。
【讨论】:
有一些基于 INAppStoreWindow 的新解决方案,并且没有警告和日志消息,适用于任何想要更改 NStitlebar 高度、更改交通灯位置、在 NStitlebar 上添加项目(例如 NSbutton)并更改其位置,请在下面查看。
方式窗口: https://github.com/weAreYeah/WAYWindow
NStitlebar_with_item: https://github.com/ZHANGneuro/NStitlebar_with_item
【讨论】: