web-dev-qa-db-ja.com

NSWindowタイトルバーにサブビューを追加

カスタムウィンドウツールバーを作成したいのですが、実際のNSToolbarを使用せずに(必要に応じて正しく動作せず、希望どおりにスタイルを設定できないため)、サブビューをに追加する必要があります。ウィンドウのタイトルバー。次のようになります。 Screenshot of custom Toolbar

考えられる方法は次のとおりです。

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

しかし、これには問題があり、ヨセミテに警告が表示されます(NSWindow warning: adding an unknown subview: <NSView: 0x608000122b20>)したがって、これは正しい方法ではないようです。

現在、ツールバービューをタイトルバービューに追加しています。

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

しかし、これも間違っていると感じます。

私のアプリはOSX 10.10(Yosemite)のみを対象としているため、YosemiteのみのAPIを使用しても問題ありません。そこで、NSTitlebarAccessoryViewControllerを調べて、サブクラス化してNSWindow's addTitlebarAccessoryViewController: 方法。このアプローチでは、1つの問題が残っています。layoutAttributeの可能な値は次のとおりです。

  • NSLayoutAttributeBottom
    ビューの高さを維持しながら、ウィンドウのタイトルバーの下部にビューを追加します。
  • NSLayoutAttributeRight
    ウィンドウのタイトルバーの右側にビューを追加し、ビューをタイトルバーの高さにクリップします。

NSLayoutAttributeBottomは、ウィンドウのタイトルバーの上部に配置し(上のスクリーンショットを参照)、信号を中央に配置する必要があるため、私には適していません。 NSLayoutAttributeRightはまさに私が必要としているものですが、タイトルバーの高さを上げる方法が見つからないため、ビューがタイトルバーの高さにクリップされ、役に立たなくなります。 (注:テクスチャウィンドウを使用してコンテンツの境界線を変更しても、実際のタイトルバーの高さは変更されないため、機能しません)

これを行うための推奨される方法は何ですか?デフォルトのタイトルバーよりも大きなビューを表示できる場合は、公式APIを使用してAccessoryViewControllerアプローチを使用することをお勧めします。

28
ePirat

それはただのNSToolBarです。ヨセミテでは、window.title.titleVisibility = .Hidden、NSToolBarがタイトルバーになります

6
zythum_朱一

WAYAppStoreWindow あなたが探していることを達成するかもしれません。 Yosemiteでのサブビューの警告を回避し、カスタムウィンドウのタイトルバーの高さを指定し、タイトルバーにサブビューを追加するために明示的に作成されました。

4
Fabian

ありがとう@ePirat

TitlebarViewにサブビューを追加することは、

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

ウィンドウをセルフビューに割り当てます。その後、フレーム付きのサブビューを追加して、必要な機能を提供します

0
Abhi