Masquer NSWindow barre de titre

y a-t-il un moyen de cacher le titlebar dans un NSWindow? Je ne veux pas complètement écrire une nouvelle fenêtre personnalisée. Je ne peux pas utiliser NSBorderlessWindowMask parce que j'ai une barre du bas sur ma fenêtre, et utiliser NSBorderlessWindowMask fait que disparaître. J'ai également essayé d'utiliser setContentBorderThickness: forEdge: avec NSMaxYEdge et le réglage à 0, qui n'a pas fonctionné non plus.

Toute aide est appréciée

15
demandé sur indragie 2010-01-07 07:07:04

7 réponses

[yourWindow setStyleMask:NSBorderlessWindowMask];
32
répondu user257587 2012-10-30 18:27:01

à partir de OS X 10.10, vous pouvez masquer la barre de titre.

        window1.titlebarAppearsTransparent  =   true
        window1.titleVisibility             =   .Hidden

peut-être que vous voulez Outrepasser le style de fenêtre.

        window1.styleMask                   =   NSResizableWindowMask
                                            |   NSTitledWindowMask
                                            |   NSFullSizeContentViewWindowMask
10
répondu Eonil 2018-07-23 22:40:14

Qu'advient-il si vous obtenez le superview du bouton fermer? Pouvez-vous vous cacher?

// Imagine that 'self' is the NSWindow derived class
NSButton *miniaturizeButton = [self standardWindowButton:NSWindowMiniaturizeButton];
NSView* titleBarView = [miniaturizeButton superview];
[titleBarView setHidden:YES];
1
répondu Lyndsey Ferguson 2010-01-08 19:37:48

la seule façon que je sais serait de créer une fenêtre sans barre de titre (voir NSBorderlessWindowMask). Notez que vous ne pouvez pas (facilement) créer une fenêtre sans barre de titre de l'IB, de sorte que vous aurez à faire un peu de travail dans le code (il y en a un quelques approches différentes, vous pouvez probablement le comprendre).

un gros inconvénient avec l'utilisation d'une fenêtre sans barre de titre est que vous êtes maintenant sur le crochet pour beaucoup plus de l'apparence standard et le comportement-coins arrondis et tel.

1
répondu János 2010-02-11 14:23:56

j'ai fait l'expérience que lorsque j'ai d'abord défini content view de ma fenêtre et que j'ai ensuite défini window borderless:

[yourWindow setStyleMask:NSBorderlessWindowMask];

Rien n'apparaît dans ma fenêtre. Donc j'ai d'abord défini le masque de style et après cela j'ai défini la vue de contenu:

- (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;     
}
1
répondu nio 2013-07-30 08:02:01

Vous pouvez utiliser WAYInAppStoreWindow

0
répondu Dalmazio 2015-07-21 19:14:03

en quelque sorte écran d'Accueil NSWindow / NSViewController setup (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)
      }
   }
}

Résultat

Welcome screen style NSWindow

0
répondu Vlad 2018-01-29 22:34:03