隐藏NSWindow标题栏

时间:2010-01-07 04:07:04

标签: objective-c cocoa nswindow

有没有办法隐藏NSWindow中的标题栏?我不想完全写一个新的自定义窗口。我不能使用NSBorderlessWindowMask,因为我的窗口上有一个底栏,使用NSBorderlessWindowMask使它消失。我也尝试使用setContentBorderThickness:forEdge:使用NSMaxYEdge并将其设置为0,这也不起作用。

感谢任何帮助

9 个答案:

答案 0 :(得分:32)

[yourWindow setStyleMask:NSBorderlessWindowMask];

答案 1 :(得分:12)

从OS X 10.10开始,您可以隐藏标题栏。

window1.titlebarAppearsTransparent = true
window1.titleVisibility            = .Hidden

也许您想要覆盖窗口样式。

window1.styleMask = NSResizableWindowMask
                  | NSTitledWindowMask
                  | NSFullSizeContentViewWindowMask

答案 2 :(得分:1)

如果您获得关闭按钮的超级视图会怎样?你能隐瞒吗?

// Imagine that 'self' is the NSWindow derived class
NSButton *miniaturizeButton = [self standardWindowButton:NSWindowMiniaturizeButton];
NSView* titleBarView = [miniaturizeButton superview];
[titleBarView setHidden:YES];

答案 3 :(得分:1)

我知道的唯一方法是创建一个没有标题栏的窗口(参见 NSBorderlessWindowMask)。请注意,你不能(轻松)创建一个没有的窗口 IB中的标题栏,所以你必须在代码中做一些工作(有一个 几种不同的方法,你可以想出来。)

使用没有标题栏的窗口的一大缺点是你现在正在使用 更多的标准外观和行为 - 圆角 等等。

答案 4 :(得分:1)

我有一种体验,当我第一次设置窗口的内容视图,然后将窗口设置为无边界时:

[yourWindow setStyleMask:NSBorderlessWindowMask];

我的窗口中什么都没有出现。所以我首先设置样式掩码,之后我设置了内容视图:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{ 
    // 1. borderless window
    [[self window] setStyleMask: NSBorderlessWindowMask];
    // 2. create the master View Controller
    self.masterViewController = [[MasterViewController alloc] initWithNibName:@"MasterViewController" bundle:nil];
    // 3. Add the view controller to the Window's content view
    [self.window.contentView addSubview:self.masterViewController.view];
    self.masterViewController.view.frame = ((NSView*)self.window.contentView).bounds;     
}

瞧,窗口的内容已经出现了。

答案 5 :(得分:1)

种类欢迎屏幕 NSWindow / NSViewController设置(Swift 4.1)

extension NSWindow {

   enum Style {
      case welcome
   }

   convenience init(contentRect: CGRect, style: Style) {
      switch style {
      case .welcome:
         let styleMask: NSWindow.StyleMask = [.closable, .titled, .fullSizeContentView]
         self.init(contentRect: contentRect, styleMask: styleMask, backing: .buffered, defer: true)
         titlebarAppearsTransparent = true
         titleVisibility = .hidden
         standardWindowButton(.zoomButton)?.isHidden = true
         standardWindowButton(.miniaturizeButton)?.isHidden = true
      }
   }
}

class WelcomeWindowController: NSWindowController {

   private (set) lazy var viewController = WelcomeViewController()
   private let contentWindow: NSWindow

   init() {
      contentWindow = NSWindow(contentRect: CGRect(x: 400, y: 200, width: 800, height: 472), style: .welcome)
      super.init(window: contentWindow)

      let frameSize = contentWindow.contentRect(forFrameRect: contentWindow.frame).size
      viewController.view.setFrameSize(frameSize)
      contentWindow.contentViewController = viewController
   }
}

class WelcomeViewController: NSViewController {

   private lazy var contentView = View()

   override func loadView() {
      view = contentView
   }

   init() {
      super.init(nibName: nil, bundle: nil)
   }

   override func viewDidLoad() {
      super.viewDidLoad()
      contentView.backgroundColor = .white
   }
}

class View: NSView {

   var backgroundColor: NSColor?

   convenience init() {
      self.init(frame: NSRect())
   }

   override func draw(_ dirtyRect: NSRect) {
      if let backgroundColor = backgroundColor {
         backgroundColor.setFill()
         dirtyRect.fill()
      } else {
         super.draw(dirtyRect)
      }
   }
}

结果

Welcome screen style NSWindow

答案 6 :(得分:1)

在故事板或 XIB 中选择窗口并勾选红色圆圈选项。

答案 7 :(得分:0)

你可以在GitHub上使用WAYInAppStoreWindow,它适用于Yosemite和Mavericks。

答案 8 :(得分:0)

迅速

NSApp.mainWindow?.styleMask = .borderless

enter image description here