【问题标题】: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 中提供新的窗口样式。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-03
          • 1970-01-01
          • 1970-01-01
          • 2014-09-28
          • 2011-10-27
          • 1970-01-01
          相关资源
          最近更新 更多