gpt4 book ai didi

cocoa - 如何更改 NSWindow 标题栏的高度?

转载 作者:行者123 更新时间:2023-12-03 16:04:24 25 4
gpt4 key购买 nike

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

以下是一些示例: alt text

还有……

alt text

我可以使用 NSToolbar,但问题是我无法将 View 放置在非常高的位置(例如:我无法将分段控件放置在比图片更高的位置,因为仍然有标题栏) alt text

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

你有什么想法吗?

最佳答案

这比人们想象的要容易得多。我也一直在寻求为我的应用程序做类似的事情。

真实的 App Store 应用程序: Here is the App Store app...

我的 App Store 应用程序看起来很相似: My App Store look-alike...

没有对 INAppStoreWindow 的不尊重,它是一个非常好的实现并且很可靠。我从中看到的唯一缺点是有大量的绘图代码以及标题栏颜色的硬编码设置,Apple 可以随时调整这些设置。

这就是我的做法:

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

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

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

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

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

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

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

好吧,到目前为止很简单,对吧?!

在您的窗口 Controller 或应用程序委托(delegate)中......将 IBOutlet 设置到您的 NSButton

注意:请记住在界面生成器中连接 IBOutlet

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

在 awakeFromNib 或 windowDidLoad 中......

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

所以代码看起来类似于:

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

就是这样!您可以使用 socket 启用/禁用按钮、在选择时设置 mask 图像、启用/禁用工具栏,甚至隐藏所有内容并添加窗口标题。如果 Apple 更改其标准窗口标题栏,所有这一切都无需担心。

附注这篇文章中没有使用任何私有(private)框架!

关于cocoa - 如何更改 NSWindow 标题栏的高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4639207/

25 4 0