7

メニューバー アプリの特定の外観を構築しようとしています。

ここに画像の説明を入力

スタイルマスクと設定で を使用NSWindowしてきましたと. これにより、タイトル バーに最適な空白のキャンバスが得られます。NSBorderlessWindowMask[window setOpaque:NO][window setBackgroundColor:[NSColor clearColor]]

NSTableView現在、リストに使用しているビューベースに問題があります。NSTableCellViews をウィンドウの丸い角にクリップするにはどうすればよいですか?

をラップするカスタムビューをNSTableView作成し、角を丸くして背景を描画することから始めました。ただし、使用[view addClip:path]しても子ビューはクリップされません。

[view setWantsLayer:YES]マスクと一緒に使ってみました。これはうまく機能しましたが、テーブル ビューのセルが散発的に不具合を起こしていました。レイヤーの子になることNSScrollViewは既知の問題のようです。

http://i.stack.imgur.com/JmhjD.png

私の現在のビュー構造は次のようになります。

NSWindow
- MyTitleBarView
- MyBackgroundView
  - NSScrollView
    - NSTableView
4

1 に答える 1

1

私はそれを行う1つの方法を見つけました:

秘訣は、ウィンドウ スタイルをデフォルトのままにし、設定しないことですNSBorderlessWindowMask。次に、次のようにカスタム タイトル バー ビューをウィンドウのテーマ フレームに追加できます。

NSView *themeFrame = [[window contentView] superview];
NSView *firstSubview = [[themeFrame subviews] objectAtIndex:0];
[titleBarView setAutoresizingMask:(NSViewMinYMargin | NSViewWidthSizable)];
[themeFrame addSubview:titleBarView positioned:NSWindowBelow relativeTo:firstSubview];

これは基本的に、標準のタイトル バーの上にカスタム タイトル バー ビューを配置するだけです。おそらく、ビュー フレームとウィンドウ ボタンを再調整する必要があります。このコード例については、INAppStoreWindowを参照してください。

INAppStoreWindow プロジェクトによると、このメソッドはプライベート API を使用しないため、App Store で使用できます。

ウィンドウを透明にする必要がある場合は、ウィンドウで次のように設定できます。

[window setOpaque:NO];
[window setBackgroundColor:[NSColor colorWithCalibratedWhite:1.0 alpha:0.5]];
于 2012-07-28T11:16:01.513 に答える