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 回答