superior pages ocultar mostrar menú mac herramientas fija dejar cómo como barra objective-c cocoa osx-yosemite appkit nstitlebaraccessoryviewcontroller

objective c - pages - Añadir subvista a la barra de título de NSWindow



ocultar barra de menu mac (4)

Asigna tu ventana a la vista propia. y luego agregue la subvista con el marco más tarde proporcione la funcionalidad requerida

Quiero crear una barra de herramientas de Windows personalizada pero sin usar una NSToolbar real (porque en algunos casos no se comporta bien para mis necesidades y no puedo usar el estilo que quiero), por lo tanto, debo agregar una subvista al Barra de título de la ventana. Debe parecerse a lo siguiente:

Una posible manera sería:

[[[_window contentView] superview] addSubview:_titlebarView];

pero esto tiene el problema, que provoca una advertencia en Yosemite ( NSWindow warning: adding an unknown subview: <NSView: 0x608000122b20> ), por lo que no parece ser la forma correcta de hacerlo.

Actualmente estoy agregando la vista de la barra de herramientas a la vista de la barra de título:

[[[_window standardWindowButton:NSWindowCloseButton] superview] addSubview:_titlebarView];

pero esto se siente mal también.

Como mi aplicación solo se enfoca en OS X 10.10 (Yosemite), estaría bien para mí usar API solo para Yosemite, así que eché un vistazo a NSTitlebarAccessoryViewController y logré subclasificar con éxito y usarlo con el NSWindow de addTitlebarAccessoryViewController: . Con este enfoque queda un problema, los valores posibles para layoutAttribute son:

  • NSLayoutAttributeBottom
    Agrega la vista a la parte inferior de la barra de título de la ventana, a la vez que conserva la altura de la vista.
  • NSLayoutAttributeRight
    Agrega la vista a la derecha de la barra de título de la ventana, recortando la vista a la altura de la barra de título.

El NSLayoutAttributeBottom no es adecuado para mí, ya que necesito colocar las cosas en la parte superior de la barra de título de la ventana (ver captura de pantalla más arriba) y centrar los semáforos. NSLayoutAttributeRight sería exactamente lo que necesito, pero no puedo encontrar una manera de aumentar la altura de la barra de título, por lo que la vista se recorta a la altura de la barra de título, por lo que es inútil para mí. (Nota: usar una ventana con textura y cambiar el borde del contenido no funciona, ya que no cambiará la altura real de la barra de título)

cual es la manera recomendada para hacer esto? Preferiría ir con las API oficiales y usar el enfoque de AccessoryViewController, si fuera posible tener una vista más grande que la barra de título predeterminada.


Gracias @ePirat

Agregar subvistas a su barra de título, sería lo mismo que hacer

[[[_window standardWindowButton:NSWindowCloseButton] superview] addSubview:_customTitlebarView];


es solo un NSToolBar. en Yosemite, cuando window.title.titleVisibility = .Hidden , el NSToolBar se convertirá en la barra de título


WAYAppStoreWindow puede lograr lo que estás buscando. Se construyó explícitamente para evitar la advertencia de subvista en Yosemite, especifique una altura de barra de título de ventana personalizada y agregue subvistas a la barra de título.