web-dev-qa-db-fra.com

Ajouter une sous-vue à la barre de titre NSWindow

Je veux créer une barre d’outils personnalisée sans utiliser de barre NSTool réelle (car dans certains cas, elle ne se comporte pas correctement et je ne peux pas l’appeler de la manière que je souhaite), je dois donc ajouter une sous-vue à la vue. Barre de titre de la fenêtre. Cela devrait ressembler à ceci: Screenshot of custom Toolbar

Une manière possible serait:

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

mais cela a le problème, cela provoque un avertissement sur Yosemite (NSWindow warning: adding an unknown subview: <NSView: 0x608000122b20>), donc cela ne semble pas être la bonne façon de le faire.

Actuellement, j'ajoute la vue de la barre d'outils à la vue de la barre de titre:

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

mais cela ne va pas aussi.

Étant donné que mon application ne cible que Mac OS X 10.10 (Yosemite), il ne me convient pas d'utiliser les API uniquement de Yosemite. J'ai donc jeté un œil sur NSTitlebarAccessoryViewController et j'ai réussi à la sous-classer et à l'utiliser avec la méthode NSWindow de addTitlebarAccessoryViewController:. Avec cette approche, il reste un problème, les valeurs possibles pour layoutAttribute sont:

  • NSLayoutAttributeBottom
    Ajoute la vue au bas de la barre de titre de la fenêtre, tout en préservant la hauteur de la vue.
  • NSLayoutAttributeRight
    Ajoute la vue à droite de la barre de titre de la fenêtre, coupant ainsi la vue à la hauteur de la barre de titre.

La NSLayoutAttributeBottom ne me convient pas, car je dois positionner les choses tout en haut de la barre de titre de la fenêtre (voir la capture d'écran ci-dessus) et centrer les feux de signalisation. NSLayoutAttributeRight serait exactement ce dont j'avais besoin, mais je ne trouve pas le moyen d'augmenter la hauteur de la barre de titre. La vue est donc coupée à la hauteur de la barre de titre, ce qui la rend inutile pour moi. (Remarque: L'utilisation d'une fenêtre texturée et la modification de la bordure du contenu ne fonctionnent pas car cela ne modifiera pas la hauteur réelle de la barre de titre.)

Quelle est la façon recommandée de faire cela? Je préférerais utiliser les API officielles et utiliser l'approche AccessoryViewController, s'il serait possible d'avoir une vue plus grande que la barre de titre par défaut.

27
ePirat

c'est juste une NSToolBar. dans Yosemite, lorsque window.title.titleVisibility = .Hidden, la NSToolBar deviendra la barre de titre

6
zythum_朱一

WAYAppStoreWindow pourrait accomplir ce que vous cherchez. Il a été construit explicitement pour éviter l'avertissement de sous-vue dans Yosemite, spécifier une hauteur de barre de titre de fenêtre personnalisée et ajouter des sous-vues à la barre de titre.

4
Fabian

Merci @ ePirat

Ajouter des sous-vues à leur titlebarView, équivaudrait à faire

[[[_window standardWindowButton:NSWindowCloseButton] superview] addSubview:_customTitlebarView];
1
Huynh Inc

Attribuez votre fenêtre à une vue de soi. puis ajoutez la sous-vue avec cadre pour fournir ultérieurement les fonctionnalités requises

0
Abhi