2010-01-07 20 views
14

¿Hay alguna manera de ocultar la barra de título en NSWindow? No quiero tener que escribir completamente una nueva ventana personalizada. No puedo usar NSBorderlessWindowMask porque tengo una barra inferior en mi ventana, y usar NSBorderlessWindowMask hace que desaparezca. También intenté usar setContentBorderThickness: forEdge: con NSMaxYEdge y configurándolo en 0, eso tampoco funcionó.Ocultar barra de título NSWindow

Cualquier ayuda se agradece

+0

que prácticamente sólo terminamos cambiando el diseño de mi aplicación para que esto no es necesario, para todos aquellos que están pensando en hacer lo mismo, no es un gran camino por recorrer. – indragie

Respuesta

1

¿Qué pasa si le da la supervista del botón de cierre? ¿Puedes ocultar eso?

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

Intenté esto y solo da vuelta a la ventana blanca y en blanco. Si no me equivoco, la supervista del botón es NSThemeFrame. Sin embargo, podría intentar ajustar el marco de la vista para ver si puedo reducirlo. – indragie

+0

Ajustando el marco no funciona bien, obtengo todo tipo de resultados extraños. Bastante atascado, supongo. – indragie

+0

El motivo por el que no funcionó es que NSThemeFrame es la supervista de contentView de la ventana. Oculta la vista de marco y todas sus subvistas también se ocultan. – NSResponder

32
[yourWindow setStyleMask:NSBorderlessWindowMask]; 
+4

Creo que también tiene que anular canBecomeKeyWindow o algo así. Intenté esto y todo lo que sucedió es que mi ventana no se mostraría. Sin embargo, utilicé el código de muestra de Apple que bijan enlazó y funcionó maravillosamente. –

+0

Indragie indicó explícitamente que no podía usar NSBorderlessWindowMask. – ctpenrose

+0

@KennyWyland ¿cuál es el enlace? – skywinder

1

La única forma que conozco sería la creación de una ventana sin barra de título (ver NSBorderlessWindowMask). Tenga en cuenta que no puede (fácilmente) crear una ventana sin una barra de título en IB, por lo que tendrá que trabajar un poco en el código (hay un par de enfoques diferentes de , probablemente pueda resolverlo).

Un gran inconveniente con el uso de una ventana sin barra de título es que eres ahora en el gancho para mucho más de la apariencia y el comportamiento estándar - esquinas redondeadas y tales.

1

tuve una experiencia que cuando me puse primera vista del contenido de mi ventana y luego ajusta la ventana sin bordes:

[yourWindow setStyleMask:NSBorderlessWindowMask]; 

Nada aparecería en mi ventana. Así que me puse por primera vez la máscara de estilo y después de eso me he fijado la vista de contenido:

- (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;  
} 

y listo, el contenido de la ventana de mi ha aparecido.

9

A partir de OS X 10.11, puede ocultar la barra de título.

 window1.titlebarAppearsTransparent = true 
     window1.titleVisibility    = .Hidden 

Quizás desea anular estilo de ventana.

 window1.styleMask     = NSResizableWindowMask 
              | NSTitledWindowMask 
              | NSFullSizeContentViewWindowMask 
0

tipo de pantalla NSWindow configuración Bienvenido/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) 
     } 
    } 
} 

Resultado

Welcome screen style NSWindow

Cuestiones relacionadas