2015-10-16 6 views
10

NSWindowにタイトルバーなしでresize indicatorsを表示するにはどうすればよいですか?NSWindowサイズ変更インジケータが表示されない


私は、ストーリーボードで新しいXcodeプロジェクト(Macアプリケーション用)を作成しました。外観のチェックボックスTitle Barを無効にしました(NSwindowのタイトルバーを非表示にします)。

奇妙なことに、タイトルバーを無効にした後、マウスがウィンドウの端より上にある間、NSWindowはサイズ変更インジケーターを表示していませんでした。エッジをドラッグするとサイズが変更されましたが

これはバグだと思います。ウィンドウをエッジの上にドラッグしてサイズを変更できる場合は、サイズ変更インジケータが表示される必要があるためです。


image

それが画像で分かるように、ユーザーがウィンドウをドラッグした後、リサイズインジケーターが見られるが、多くのユーザーにはサイズ変更インジケータが存在しないので、ウィンドウはサイズ変更が可能ではないと思われるでしょう。

+0

マウスの追跡領域を設定していますか?サイズ変更後にマウスの追跡領域を更新していますか? – l00phole

答えて

2

私はNSWindowをサブクラス化しYESを返すためにcanBecomeKeyWindowをオーバーライドすることで、この問題を修正しました:

#import "MyWindow.h" 

@implementation MyWindow 

- (BOOL)canBecomeKeyWindow { 
    return YES; 
} 

@end 

がでカーソルのサイズを変更更新されませんこの場合はAppleのバグのようです。ドキュメントには、「canBecomeKeyWindowプロパティの値は、ウィンドウにタイトルバーまたはリサイズバーがある場合はYES、それ以外の場合はNOです」というメッセージが表示されるため、canBecomeKeyWindowはサイズ変更可能なウィンドウにはYESを返します。しかし、それはしません。

UPD:10.10.5をチェックしてください。うまくいけば、あなたは10.11で同じ行動を取るでしょう。

1

これはチェックしていませんが、手動でサイズ変更インジケータを設定できます。私は4つのNSTrackingAreasをウィンドウのcontentViewサブクラスに追加すると思います(ウィンドウの両側に1つずつ、高さ/幅のわずかなピクセルのみ)。 mouseEntered()メソッドで、適切なマウス位置の新しいNSCursorオブジェクトを作成します。位置は変更される可能性があるので、mouseMoved()メソッドも同様に使用してください。 mouseExited()でカーソルをリセットします。

もう一度やってみましたが、うまくいくはずです。

PS:この上にレーダーを提出することを忘れないでください。)

関連する問題