メソッドを使用して含まれる NSView のフレームを設定することにより、表示する前に NSPopover のサイズを変更しようとしています。
setFrameSize:
ただし、次のように呼び出してポップオーバーを表示しようとすると:
showRelativeToRect: ofView: preferredEdge:
ビューが元のサイズに戻ります。なぜこうなった?ポップオーバーのサイズを変更する別の方法はありますか?
前もってありがとう、ベン。
ポップオーバーに setContentSize がありますが、これはあまりうまくいかない印象があります。つまり、機能しますが、コンテンツのサイズが変更されます (子ビューを含む)。したがって、より良い方法は、新しい NSViewController を作成し、それに新しいビューを割り当てることです。NSPopover でこの新しいコントローラーを設定すると、サイズが適切に考慮され、ポップオーバーが現在表示されている場合は、新しいビューにアニメーション化されます。
これを行うことができず、その場でコンテンツのサイズを変更したい場合は、次のようなものを使用します:
NSRect frame = valuePopupList.frame;
frame.origin = NSMakePoint(2, 2);
... determine new frame ...
NSSize contentSize = frame.size;
contentSize.width += 4; // Border left/right.
contentSize.height += 4; // Ditto for top/bottom.
if (contentSize.height < 26) {
contentSize.height = 26;
}
valuePopupList.frame = frame;
statementsPopover.contentSize = contentSize;
[statementsPopover showRelativeToRect: area ofView: view preferredEdge: NSMaxXEdge];
valuePopupList.frameOrigin = frame.origin;
ポップオーバーに含まれる NSViewController に -preferredContentSize を実装する必要があります。これは、ポップオーバーのサイズを制御する最も信頼できる方法のようです。