gpt4 book ai didi

objective-c - 在标准 NSWindow 上创建自定义标题栏

转载 作者:太空狗 更新时间:2023-10-30 03:38:33 24 4
gpt4 key购买 nike

我一直在尝试为我的菜单栏应用构建一个特定的外观。

enter image description here

我一直在使用带有 NSBorderlessWindowMask 样式掩码的 NSWindow 并设置 [window setOpaque:NO][window setBackgroundColor:[NSColor clearColor]]。这给了我一个空白 Canvas ,非常适合标题栏。

现在我在使用基于 View 的NSTableView 时遇到了问题,我正在使用该列表。如何将 NSTableCellView 剪切到窗口的圆角?

我刚开始只是用一个自定义 View 包裹 NSTableView,用圆角绘制背景。不过,使用 [view addClip:path] 不会剪辑 subview 。

我也尝试过使用带面具的[view setWantsLayer:YES]。效果很好,但表格 View 单元格偶尔会出现故障。将 NSScrollView 作为图层的子项似乎是一个已知问题:

http://i.stack.imgur.com/JmhjD.png

我当前的 View 结构类似于:

NSWindow
- MyTitleBarView
- MyBackgroundView
- NSScrollView
- NSTableView

最佳答案

我找到了一种方法:

诀窍是将窗口样式保持为默认样式并且不设置 NSBorderlessWindowMask。然后您可以将自定义标题栏 View 添加到窗口的主题框架中,如下所示:

NSView *themeFrame = [[window contentView] superview];
NSView *firstSubview = [[themeFrame subviews] objectAtIndex:0];
[titleBarView setAutoresizingMask:(NSViewMinYMargin | NSViewWidthSizable)];
[themeFrame addSubview:titleBarView positioned:NSWindowBelow relativeTo:firstSubview];

这基本上只是将您的自定义标题栏 View 放在标准标题栏的顶部。您可能需要对 View 框架和窗口按钮进行一些调整。参见 INAppStoreWindow有关此的一些代码示例。

INAppStoreWindow 项目表示此方法不使用任何私有(private) API,因此可以在 App Store 上使用。

如果需要窗口透明,可以在窗口上设置如下:

[window setOpaque:NO];
[window setBackgroundColor:[NSColor colorWithCalibratedWhite:1.0 alpha:0.5]];

关于objective-c - 在标准 NSWindow 上创建自定义标题栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11658044/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com