1

メソッドを使用して含まれる NSView のフレームを設定することにより、表示する前に NSPopover のサイズを変更しようとしています。

setFrameSize:

ただし、次のように呼び出してポップオーバーを表示しようとすると:

showRelativeToRect: ofView: preferredEdge:

ビューが元のサイズに戻ります。なぜこうなった?ポップオーバーのサイズを変更する別の方法はありますか?

前もってありがとう、ベン。

4

2 に答える 2

1

ポップオーバーに 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;
于 2013-04-22T17:40:35.563 に答える
0

ポップオーバーに含まれる NSViewController に -preferredContentSize を実装する必要があります。これは、ポップオーバーのサイズを制御する最も信頼できる方法のようです。

于 2019-02-20T23:46:40.067 に答える