【问题标题】:Round corners on a borderless NSWindow无边框 NSWindow 上的圆角
【发布时间】:2011-04-29 13:44:40
【问题描述】:
我正在创建一个应用程序和I don't want a title bar:
如果标题始终保持不变,显示它是否有意义?例如,如果一个应用程序没有显示文档的名称,或者它打开的任何其他资产的名称,并且如果您想移动窗口,其他控件周围的顶部有足够的空间可以抓住,那么标题有多大用途?
问题是:我该怎么做?我尝试使用[mainWindow setStyleMask:NSBorderlessWindowMask];,但我不能让它有圆角。我真的不知道如何制作圆角。除此之外,我不能让它有一个调整大小的控件。如果我使用[mainWindow setStyleMask:NSBorderlessWindowMask | NSResizableWindowMask];,它就不再是无边界的了。谁能帮我?谢谢。
【问题讨论】:
标签:
cocoa
nswindow
titlebar
borderless
【解决方案1】:
使用一个简单的技巧可以轻松创建一个带圆角的窗口:创建一个具有透明背景的窗口,将NSBox 放入该窗口并将其用作您的内容视图。 NSBox 已经有圆角、可自定义的背景颜色和可自定义的边框(样式、颜色和圆角半径可自定义)。这大部分甚至可以在 Interface Builder 中完成,实际上只需要最后两行代码。如需完整的详细示例,请see here。
【解决方案2】:
虽然这是一个非常古老的问题......
现在在 OS X 10.11 上更容易了。
window1.backgroundColor = NSColor.whiteColor()
window1.opaque = false
window1.styleMask = NSResizableWindowMask
| NSTitledWindowMask
| NSFullSizeContentViewWindowMask
window1.movableByWindowBackground = true
window1.titlebarAppearsTransparent = true
window1.titleVisibility = .Hidden
window1.showsToolbarButton = false
window1.standardWindowButton(NSWindowButton.FullScreenButton)?.hidden = true
window1.standardWindowButton(NSWindowButton.MiniaturizeButton)?.hidden = true
window1.standardWindowButton(NSWindowButton.CloseButton)?.hidden = true
window1.standardWindowButton(NSWindowButton.ZoomButton)?.hidden = true
window1.setFrame(CGRect(x: 400, y: 0, width: 400, height: 500), display: true)
window1.makeKeyAndOrderFront(self)
Here 的完整工作示例。
这是来自another question 的复制答案。似乎有点不同,但可以平等地回答。
【解决方案3】:
如果您想做一些完全不同的事情(比如绘制自己的窗口),请查看 Matt Gemmell's code. 查看 MAAttachedWindow 代码,了解删除标题栏、绘制贝塞尔角并使其看起来很棒的方法。
【解决方案4】:
这里有一个类似的 SO 问题:Hide NSWindow title bar。
基本上,如果您使用 NSBorderlessWindowMask,则不能使用任何其他 style mask,因此您必须实现自己的窗口控件并自己圆角。
或者您可以使用常规的 NSWindow 而只是不设置标题。有关示例,请参阅 Tweetie.app。
希望 Apple 将在 10.7 中提供新的窗口样式。