调整nspopover的大小

时间:2013-01-17 12:18:20

标签: resize nsview nspopover

我试图在显示之前调整NSPopover的大小,方法是使用以下方法设置它包含的NSView的框架:

setFrameSize:

然而,当我尝试通过调用

来显示popover时
showRelativeToRect: ofView: preferredEdge:

视图返回其先前的大小。为什么会这样?还有另一种方法我应该调整popover吗?

提前致谢,Ben。

2 个答案:

答案 0 :(得分:1)

popover上有一个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;

答案 1 :(得分:0)

您应该在弹出框所包含的NSViewController中实现-preferredContentSize。这似乎是控制弹出窗口大小的最可靠方法。