【发布时间】:2012-11-13 09:41:11
【问题描述】:
我有一个自定义的 NSWindow 子类 - INAppStoreWindow (github) 和自定义标题栏视图 - 我想做这样的事情:
如您所见,功能区并不完全位于标题栏之外。就像在中间。
我怎样才能做到这一点?
【问题讨论】:
标签: objective-c macos nsview nswindow titlebar
我有一个自定义的 NSWindow 子类 - INAppStoreWindow (github) 和自定义标题栏视图 - 我想做这样的事情:
如您所见,功能区并不完全位于标题栏之外。就像在中间。
我怎样才能做到这一点?
【问题讨论】:
标签: objective-c macos nsview nswindow titlebar
最简单的方法可能是为徽章使用单独的窗口。使其成为主窗口的子窗口,它将保持在顶部并随其移动。它将是无边界的并且基本上是透明的,等等。
但是,如果主窗口水平调整大小,可能很难保持徽章子窗口的正确定位。或者,您可以轻松地移动徽章子窗口,但它可能会滞后于调整大小。
【讨论】:
您的图像必须绘制在窗口区域内。 即使这意味着您的窗口的某些部分是透明的。
你可以用所有常见的无边框窗口的东西来做到这一点。只需将两个视图用于标题栏区域。一种用于标题栏本身,其中视图内容清晰,或者您可以说不透明的内容没有到达视图的顶部。 在您的徽章的子视图中,绘制您喜欢的任何徽章。让您的徽章视图延伸到标题栏视图的顶部并重叠其透明区域。
您可能会在窗口与菜单栏的交互方式和外观方面遇到糟糕的权衡。由于这是高度非标准的,并且存在应该由 Cocoa 提供和解决的 UI 问题(如果有的话),我建议寻找不同的设计。这将需要大量的工作来维护和完成。自定义的无边框窗口并不难做,但很难做好。在 OS X 上 NSWindow 的子视图中有许多视觉状态变化的细微之处。颜色会根据窗口的键和主要状态而变化。它是免费的标准窗口和视图。使用定制的东西,你必须做更多的事情。
【讨论】: